Настройка точек данных в диаграммах Treemap и Sunburst с помощью PHP
Среди других типов диаграмм PowerPoint есть два «иерархических» типа — Treemap и Sunburst (также известные как Sunburst Graph, Sunburst Diagram, Radial Chart, Radial Graph или Multi Level Pie Chart). Эти диаграммы отображают иерархические данные, организованные в виде дерева — от листьев к вершине ветки. Листья определяются точками данных серии, а каждый последующий уровень вложенной группировки определяется соответствующей категорией. Aspose.Slides for PHP via Java позволяет форматировать точки данных диаграмм Sunburst и Treemap.
Ниже представлена диаграмма Sunburst, где данные в колонке Series1 определяют листовые узлы, а остальные колонки определяют иерархические точки данных:
Начнём с добавления новой диаграммы Sunburst в презентацию:
$pres = new Presentation();
try {
$chart = $pres->getSlides()->get_Item(0)->getShapes()->addChart(ChartType::Sunburst, 100, 100, 450, 400);
# ...
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Если необходимо форматировать точки данных диаграммы, следует использовать следующее:
ChartDataPointLevelsManager, ChartDataPointLevel классы и метод ChartDataPoint::getDataPointLevels предоставляют доступ к форматированию точек данных диаграмм Treemap и Sunburst.
ChartDataPointLevelsManager используется для доступа к многоуровневым категориям — он представляет контейнер объектов ChartDataPointLevel…. По сути это оболочка для ChartCategoryLevelsManager с свойствами, добавленными специально для точек данных.
Класс [ChartDataPointLevel] имеет два метода: getFormat и getDataLabel, которые предоставляют доступ к соответствующим настройкам.
Отображение значения точки данных
Показать значение точки данных «Leaf 4»:
$dataPoints = $chart->getChartData()->getSeries()->get_Item(0)->getDataPoints();
$dataPoints->get_Item(3)->getDataPointLevels()->get_Item(0)->getLabel()->getDataLabelFormat()->setShowValue(true);
Установка подписи и цвета точки данных
Установить подпись точки данных «Branch 1», чтобы отображалось имя серии («Series1») вместо имени категории. Затем установить цвет текста в желтый:
$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(java("java.awt.Color")->YELLOW);
Установка цвета ветки точки данных
Изменить цвет ветки «Steam 4»:
$pres = new Presentation();
try {
$chart = $pres->getSlides()->get_Item(0)->getShapes()->addChart(ChartType::Sunburst, 100, 100, 450, 400);
$dataPoints = $chart->getChartData()->getSeries()->get_Item(0)->getDataPoints();
$stem4branch = $dataPoints->get_Item(9)->getDataPointLevels()->get_Item(1);
$stem4branch->getFormat()->getFill()->setFillType(FillType::Solid);
$stem4branch->getFormat()->getFill()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$pres->save("pres.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Часто задаваемые вопросы
Могу ли я изменить порядок (сортировку) сегментов в Sunburst/Treemap?
Нет. PowerPoint сортирует сегменты автоматически (обычно по убыванию значений, по часовой стрелке). Aspose.Slides повторяет это поведение: изменить порядок напрямую нельзя; его можно изменить только предобработкой данных.
Как тема презентации влияет на цвета сегментов и подписей?
Цвета диаграммы наследуют тему/палитру презентации, если явно не задать заполнения/шрифты. Для согласованных результатов фиксируйте сплошные заполнения и форматирование текста на нужных уровнях.
Сохранит ли экспорт в PDF/PNG пользовательские цвета веток и настройки подписей?
Да. При экспорте презентации настройки диаграммы (заполнения, подписи) сохраняются в выходных форматах, так как Aspose.Slides рендерит с применённым форматированием диаграммы.
Могу ли я вычислить фактические координаты подписи/элемента для пользовательского наложения поверх диаграммы?
Да. После проверки разметки диаграммы доступны фактические x и y для элементов (например, для DataLabel), что упрощает точное позиционирование наложений.