Настройка точек данных в диаграммах 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.

Here is a Sunburst Chart, where data in Series1 column define the leaf nodes, while other columns define hierarchical datapoints:

todo:image_alt_text

Let’s start with adding a new Sunburst chart to the presentation:

  $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();
    }
  }

If there is a need to format data points of the chart, we should use the following:

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

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

Show value of “Leaf 4” data point:

  $dataPoints = $chart->getChartData()->getSeries()->get_Item(0)->getDataPoints();
  $dataPoints->get_Item(3)->getDataPointLevels()->get_Item(0)->getLabel()->getDataLabelFormat()->setShowValue(true);

todo:image_alt_text

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

Set “Branch 1” data label to show series name (“Series1”) instead of category name. Then set text color to yellow:

  $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);

todo:image_alt_text

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

Change color of “Steam 4” branch:

  $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();
    }
  }

todo:image_alt_text

Часто задаваемые вопросы

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

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

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

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

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

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

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

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