使用 PHP 自定义 Treemap 和 Sunburst 图表中的数据点

在其他类型的 PowerPoint 图表中,有两种“层次结构”类型——TreemapSunburst 图表(也称为 Sunburst Graph、Sunburst Diagram、Radial Chart、Radial Graph 或 Multi Level Pie Chart)。这些图表以树形结构展示层次化数据——从叶子节点到分支顶部。叶子节点由系列数据点定义,每个后续的嵌套分组层级由相应的类别定义。Aspose.Slides for PHP via Java 允许对 Sunburst 图表和 Treemap 的数据点进行格式化。

下面是一个 Sunburst 图表,Series1 列中的数据定义叶子节点,而其他列定义层次化的数据点:

todo:image_alt_text

让我们开始向演示文稿中添加一个新的 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 类有两个方法:getFormatgetDataLabel,它们提供对相应设置的访问。

显示数据点值

显示 “Leaf 4” 数据点的值:

  $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”)而不是类别名称。然后将文本颜色设为黄色:

  $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

设置数据点分支颜色

更改 “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();
    }
  }

todo:image_alt_text

常见问题

我能更改 Sunburst/Treemap 中分段的顺序(排序)吗?

否。PowerPoint 会自动对分段进行排序(通常按值降序、顺时针)。Aspose.Slides 以相同方式工作:无法直接更改顺序;只能通过预处理数据来实现。

演示文稿主题如何影响分段和标签的颜色?

图表颜色会继承演示文稿的 主题/调色板,除非显式设置填充/字体。为获得一致效果,请在所需层级锁定实色填充和文本格式。

导出为 PDF/PNG 时会保留自定义分支颜色和标签设置吗?

是的。导出演示文稿时,图表的设置(填充、标签)会在输出格式中保留下来,因为 Aspose.Slides 会在渲染时应用图表的格式。

我能计算标签/元素的实际坐标,以便在图表上方进行自定义覆盖吗?

可以。在图表布局验证后,元素(例如 DataLabel)的实际 x 和实际 y 坐标即可获取,有助于精确定位覆盖层。