在 Android 上自定义 Treemap 和 Sunburst 图表的数据点

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

下面是一个 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();
}

如果需要格式化图表的数据点,我们应使用以下内容:

IChartDataPointLevelsManagerIChartDataPointLevel 类以及 IChartDataPoint.getDataPointLevels 方法提供对 Treemap 和 Sunburst 图表数据点的格式化访问。
IChartDataPointLevelsManager 用于访问多层类别——它表示 IChartDataPointLevel 对象的容器。
基本上它是 IChartCategoryLevelsManager 的包装器,并为数据点添加了特定属性。
IChartDataPointLevel 类有两个方法: getFormatgetDataLabel,它们提供对相应设置的访问。

显示数据点值

显示 “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

常见问题

我可以更改 Sunburst/Treemap 中段的顺序(排序)吗?
不能。PowerPoint 会自动对段进行排序(通常按值降序、顺时针)。Aspose.Slides 复制了此行为:无法直接更改顺序;只能通过预处理数据来实现。

演示文稿主题如何影响段和标签的颜色?
除非显式设置填充/字体,否则图表颜色会继承演示文稿的 theme/palette 。为了获得一致的效果,请在所需层级锁定纯色填充和文本格式。

导出为 PDF/PNG 时会保留自定义分支颜色和标签设置吗?
会。导出演示文稿时,图表设置(填充、标签)会在输出格式中保留,因为 Aspose.Slides 会使用已应用的图表格式进行渲染。

我能计算标签/元素的实际坐标,以便在图表上方进行自定义叠加放置吗?
可以。在图表布局验证后,元素的实际 x 和实际 y 坐标可用(例如,DataLabel),这有助于精确定位叠加层。