在 Python 中自定义 Treemap 和 Sunburst 图表的数据点

简介

在 PowerPoint 的其它图表类型中,有两种层级图表——TreemapSunburst(也称为 Sunburst Graph、Sunburst Diagram、Radial Chart、Radial Graph 或 Multi-Level Pie Chart)。这些图表以树状结构展示层级数据——从叶子节点到分支顶部。叶子节点由系列数据点定义,每一级嵌套的分组由相应的类别定义。Aspose.Slides for Python via .NET 允许你在 Python 中格式化 Sunburst 图表和 Treemap 的数据点。

下面是一个 Sunburst 图表,Series1 列的数据定义叶子节点,其余列定义层级数据点:

Sunburst 图表示例

让我们先向演示文稿中添加一个新的 Sunburst 图表:

with slides.Presentation() as presentation:
    slide = presentation.slides[0]
    chart = slide.shapes.add_chart(charts.ChartType.SUNBURST, 30, 30, 450, 400)

如果需要格式化图表数据点,请使用以下 API:

ChartDataPointLevelsManagerChartDataPointLevel,以及 ChartDataPoint.data_point_levels 属性。它们提供对 Treemap 和 Sunburst 图表中数据点的格式化访问。ChartDataPointLevelsManager 用于访问多层级类别;它表示一个包含 ChartDataPointLevel 对象的容器。本质上它是 ChartCategoryLevelsManager 的包装器,并添加了特定于数据点的属性。ChartDataPointLevel 类型暴露两个属性——formatlabel——用于访问相应的设置。

显示数据点值

本节展示如何在 Treemap 和 Sunburst 图表中显示单个数据点的值。你将看到如何为选定的点启用数值标签。

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

data_points = chart.chart_data.series[0].data_points
data_points[3].data_point_levels[0].label.data_label_format.show_value = True

数据点值

设置数据点的标签和颜色

本节展示如何为 Treemap 和 Sunburst 图表中的单个数据点设置自定义标签和颜色。你将学习如何访问特定数据点、分配标签并应用实色填充以突出重要节点。

将 “Branch 1” 数据标签设置为显示系列名称(“Series1”)而不是类别名称,然后将文字颜色设为黄色:

branch1_label = data_points[0].data_point_levels[2].label
branch1_label.data_label_format.show_category_name = False
branch1_label.data_label_format.show_series_name = True

branch1_label.data_label_format.text_format.portion_format.fill_format.fill_type = slides.FillType.SOLID
branch1_label.data_label_format.text_format.portion_format.fill_format.solid_fill_color.color = draw.Color.yellow

数据点的标签和颜色

设置数据点的分支颜色

使用分支颜色可以控制父子节点在 Treemap 和 Sunburst 图表中的视觉分组方式。本节展示如何为特定数据点设置自定义分支颜色,从而突出重要子树并提升图表可读性。

更改 “Stem 4” 分支的颜色:

import aspose.slides as slides
import aspose.slides.charts as charts
import aspose.pydrawing as draw

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    chart = slide.shapes.add_chart(charts.ChartType.SUNBURST, 30, 30, 450, 400)
    data_points = chart.chart_data.series[0].data_points

    stem4_branch = data_points[9].data_point_levels[1]
    
    stem4_branch.format.fill.fill_type = slides.FillType.SOLID
    stem4_branch.format.fill.solid_fill_color.color = draw.Color.red
      
    presentation.save("branch_color.pptx", slides.export.SaveFormat.PPTX)

分支颜色

常见问题

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

不能。PowerPoint 会自动对段进行排序(通常按降序、顺时针)。Aspose.Slides 复制了这一行为:无法直接更改顺序,只能通过预处理数据来实现。

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

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

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

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

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

可以。在图表布局验证后,actual_x/actual_y 会对元素可用(例如对 DataLabel),这有助于精确定位覆盖层。