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

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

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

todo:image_alt_text

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

Presentation pres = new Presentation();
try {
    IChart chart = pres.getSlides().get_Item(0).getShapes().addChart(ChartType.Sunburst, 100, 100, 450, 400);

    // ...
} finally {
    if (pres != null) pres.dispose();
}

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

IChartDataPointLevelsManager, IChartDataPointLevel классы и IChartDataPoint.getDataPointLevels метод предоставляют доступ к форматированию точек данных Treemap и Sunburst‑диаграмм. IChartDataPointLevelsManager используется для доступа к многоуровневым категориям — это контейнер IChartDataPointLevel объектов. По сути это оболочка для IChartCategoryLevelsManager с добавленными свойствами, специфичными для точек данных. Класс IChartDataPointLevel имеет два метода: getFormat и getDataLabel , которые предоставляют доступ к соответствующим настройкам.

Отображение значения точки данных

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

IChartDataPointCollection dataPoints = chart.getChartData().getSeries().get_Item(0).getDataPoints();
dataPoints.get_Item(3).getDataPointLevels().get_Item(0).getLabel().getDataLabelFormat().setShowValue(true);

todo:image_alt_text

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

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

IDataLabel branch1Label = dataPoints.get_Item(0).getDataPointLevels().get_Item(0).getLabel();
branch1Label.getDataLabelFormat().setShowCategoryName(false);
branch1Label.getDataLabelFormat().setShowSeriesName(true);

branch1Label.getDataLabelFormat().getTextFormat().getPortionFormat().getFillFormat().setFillType(FillType.Solid);
branch1Label.getDataLabelFormat().getTextFormat().getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.YELLOW);

todo:image_alt_text

Изменение цвета ветви точки данных

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

Presentation pres = new Presentation();
try {
    IChart chart = pres.getSlides().get_Item(0).getShapes().addChart(ChartType.Sunburst, 100, 100, 450, 400);

    IChartDataPointCollection dataPoints = chart.getChartData().getSeries().get_Item(0).getDataPoints();

    IChartDataPointLevel stem4branch = dataPoints.get_Item(9).getDataPointLevels().get_Item(1);

    stem4branch.getFormat().getFill().setFillType(FillType.Solid);
    stem4branch.getFormat().getFill().getSolidFillColor().setColor(Color.RED);

    pres.save("pres.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

todo:image_alt_text

FAQ

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

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

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

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

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

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

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

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