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

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

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 классы и IChartDataPoint::get_DataPointLevels() метод предоставляют доступ к форматированию точек данных диаграмм 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 отражает это поведение: изменить порядок напрямую нельзя; его можно добиться предварительной обработкой данных.

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

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

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

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

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

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