Нарисуйте круговую диаграмму в MFC TeeChart

Мой английский не очень хорош, поэтому, пожалуйста, прости меня. Я успешно добавил свои данные в круговую диаграмму, но круговая диаграмма не отображается только с данными, отображаемыми в элементе управления.

Кажется, что свойства элемента управления были настроены соответствующим образом. Я не знаю, в чем проблема, так как всю ночь провел на ней.

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 мое описание инф. После того, как я скомпилировал и запустил свою программу, результат показывается на картинке.

введите описание изображения здесь

0

Решение

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 (меток серии) и повторение некоторой информации в легенде занимает большую часть рабочего пространства, где может отображаться диаграмма. Если условные обозначения должны быть размещены под диаграммой, а панель имеет соответствующий размер и, возможно, будет использовать информацию, не дублирующую информацию о знаках серии (с использованием другого стиля текста условных обозначений), плюс настройку знаков серии с помощью многострочного чем короче стрелка, то общий результат должен быть очень удобочитаемым.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]