Мой английский не очень хорош, поэтому, пожалуйста, прости меня. Я успешно добавил свои данные в круговую диаграмму, но круговая диаграмма не отображается только с данными, отображаемыми в элементе управления.
Кажется, что свойства элемента управления были настроены соответствующим образом. Я не знаю, в чем проблема, так как всю ночь провел на ней.
BOOL CStatInfPieDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
char temp1[100];
char temp2[100];
CString str;
// TODO: Add extra initialization here
CSeries series = (CSeries)statInfPie.Series(0);
int size = stationInfList.size();
series.put_ColorEachPoint(true);
srand(time(NULL));
for (int i = 0; i < size; i++) {
sprintf(temp1, "%s/%d ", iptostr(stationInfList[i].netaddrA), toCidr(stationInfList[i].netmaskA));
sprintf(temp2, "%s/%d", iptostr(stationInfList[i].netaddrB), toCidr(stationInfList[i].netmaskB));
strcat(temp1, temp2);
str = CString(temp1);
series.Add(stationInfList[i].bcountAToB + stationInfList[i].bcountBToA, str, RGB(rand() % 255, rand() % 255, rand() % 255));
memcpy(temp1, "\0", sizeof(temp1));
memcpy(temp2, "\0", sizeof(temp2));
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
Пример кода выше инициализирует мой диалог, который содержит элемент управления TeeChart. Я добавляю данные через функцию Add()
, массив temp1
и массив temp2
мое описание инф. После того, как я скомпилировал и запустил свою программу, результат показывается на картинке.
TeeChart пытается освободить место для длинных этикеток и легенды, автоматически уменьшая диаметр пирога. В этом случае результат является крайним; Пирог остался без радиуса.
Это может быть решено одним из нескольких способов:
Последняя версия TeeChart (AX) включает свойство InsideSlice для PieMarks.
то есть.TChart1.Series(0).asPie.PieMarks.InsideSlice = True
Для более старых версий TeeChart, где это свойство недоступно, вы можете вручную установить отрицательную величину для длины стрелки (соединителя с меткой):
то есть. TChart1.Series(0).Marks.ArrowLength = -20
Метки серий могут быть настроены на многострочное рендеринг, занимающий меньшую ширину:
то есть. TChart1.Series(0).Marks.MultiLine = True
Если в диаграмме есть легенда с очень длинными надписями, это также может быть непродуктивно для удобочитаемости диаграммы. Легенде можно присвоить значение Visible false или указать, чтобы она не изменяла размеры серии диаграмм (круговой диаграммы).
то есть. TChart1.Legend.ResizeChart = False
или может быть расположен ниже пирога
то есть. TChart1.Legend.Alignment = laBottom
Мысль о дизайне потребуется здесь. Отображение длинных меток Point Value (меток серии) и повторение некоторой информации в легенде занимает большую часть рабочего пространства, где может отображаться диаграмма. Если условные обозначения должны быть размещены под диаграммой, а панель имеет соответствующий размер и, возможно, будет использовать информацию, не дублирующую информацию о знаках серии (с использованием другого стиля текста условных обозначений), плюс настройку знаков серии с помощью многострочного чем короче стрелка, то общий результат должен быть очень удобочитаемым.
Других решений пока нет …