Настройка точек данных в диаграммах Treemap и Sunburst с использованием С++

Среди других типов диаграмм PowerPoint есть два «иерархических» типа — Treemap и Sunburst (также известные как Sunburst Graph, Sunburst Diagram, Radial Chart, Radial Graph или Multi Level Pie Chart). Эти диаграммы отображают иерархические данные, организованные как дерево — от листьев к вершине ветви. Листья задаются точками данных серии, а каждый последующий уровень вложенной группы определяется соответствующей категорией. Aspose.Slides for C++ позволяет форматировать точки данных диаграмм Sunburst и Treemap в C++.

Ниже представлена диаграмма Sunburst, где данные в столбце Series1 определяют листовые узлы, а остальные столбцы определяют иерархические точки данных:

todo:image_alt_text

Начнём с добавления новой диаграммы Sunburst в презентацию:

auto pres = System::MakeObject<Presentation>();
auto chart = pres->get_Slides()->idx_get(0)->get_Shapes()->AddChart(ChartType::Sunburst, 100.0f, 100.0f, 450.0f, 400.0f);
// ...

Если необходимо отформатировать точки данных диаграммы, следует использовать следующее:

IChartDataPointLevelsManager, IChartDataPointLevel classes и IChartDataPoint::get_DataPointLevels() method предоставляют доступ к форматированию точек данных диаграмм Treemap и Sunburst.
IChartDataPointLevelsManager используется для доступа к многоуровневым категориям — он представляет контейнер объектов IChartDataPointLevel.
По сути это оболочка для IChartCategoryLevelsManager со свойствами, специфичными для точек данных.
Класс [IChartDataPointLevel] имеет два метода: get_Format() и get_Label(), которые предоставляют доступ к соответствующим настройкам.

Показать значение точки данных

Показать значение точки данных «Leaf 4»:

auto dataPoints = chart->get_ChartData()->get_Series()->idx_get(0)->get_DataPoints();
dataPoints->idx_get(3)->get_DataPointLevels()->idx_get(0)->get_Label()->get_DataLabelFormat()->set_ShowValue(true);

todo:image_alt_text

Установить метку и цвет точки данных

Установить метку данных «Branch 1» так, чтобы отображалось имя серии (“Series1”) вместо имени категории. Затем установить цвет текста в желтый:

auto branch1Label = dataPoints->idx_get(0)->get_DataPointLevels()->idx_get(2)->get_Label();
branch1Label->get_DataLabelFormat()->set_ShowCategoryName(false);
branch1Label->get_DataLabelFormat()->set_ShowSeriesName(true);

branch1Label->get_DataLabelFormat()->get_TextFormat()->get_PortionFormat()->get_FillFormat()->set_FillType(FillType::Solid);
branch1Label->get_DataLabelFormat()->get_TextFormat()->get_PortionFormat()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Yellow());

todo:image_alt_text

Установить цвет ветки точки данных

Изменить цвет ветки «Stem 4»:

auto pres = System::MakeObject<Presentation>();
auto chart = pres->get_Slides()->idx_get(0)->get_Shapes()->AddChart(ChartType::Sunburst, 100.0f, 100.0f, 450.0f, 400.0f);
auto dataPoints = chart->get_ChartData()->get_Series()->idx_get(0)->get_DataPoints();

auto stem4branch = dataPoints->idx_get(9)->get_DataPointLevels()->idx_get(1);
stem4branch->get_Format()->get_Fill()->set_FillType(FillType::Solid);
stem4branch->get_Format()->get_Fill()->get_SolidFillColor()->set_Color(Color::get_Red());

pres->Save(u"pres.pptx", SaveFormat::Pptx);

todo:image_alt_text

FAQ

Могу ли я изменить порядок (сортировку) сегментов в Sunburst/Treemap?

Нет. PowerPoint сортирует сегменты автоматически (обычно по убывающим значениям, по часовой стрелке). Aspose.Slides зеркалирует это поведение: изменить порядок напрямую невозможно; добиться его можно только предварительной обработкой данных.

Как тема презентации влияет на цвета сегментов и меток?

Цвета диаграмм наследуют theme/palette презентации, если вы явно не задаете заливки/шрифты. Для согласованных результатов фиксируйте сплошные заливки и форматирование текста на требуемых уровнях.

Сохранит ли экспорт в PDF/PNG пользовательские цвета веток и настройки меток?

Да. При экспорте презентации настройки диаграммы (заливки, метки) сохраняются в выходных форматах, так как Aspose.Slides рендерит их с примененным форматированием.

Могу ли я вычислить реальные координаты метки/элемента для пользовательского размещения наложения поверх диаграммы?

Да. После того как макет диаграммы проверен, доступны реальные X и Y для элементов (например, DataLabel), что помогает точно позиционировать наложения.