使用 С++ 自定义树状图和旭辉图中的数据点
在 PowerPoint 图表的其他类型中,有两种“层次结构”类型——Treemap 和 Sunburst 图表(也称为 Sunburst Graph、Sunburst Diagram、Radial Chart、Radial Graph 或 Multi Level Pie Chart)。这些图表显示组织为树形结构的层次数据——从叶子到分支顶部。叶子由系列数据点定义,每个后续的嵌套分组层级由相应的类别定义。Aspose.Slides for C++ 允许在 C++ 中格式化 Sunburst Chart 和 Treemap 的数据点。
下面是一个 Sunburst 图表,其中 Series1 列的数据定义叶子节点,而其他列定义层次数据点:
让我们从向演示文稿添加一个新的 Sunburst 图表开始:
auto pres = System::MakeObject<Presentation>();
auto chart = pres->get_Slides()->idx_get(0)->get_Shapes()->AddChart(ChartType::Sunburst, 100.0f, 100.0f, 450.0f, 400.0f);
// ...
如果需要格式化图表的数据点,我们应该使用以下内容:
IChartDataPointLevelsManager、IChartDataPointLevel 类和 IChartDataPoint::get_DataPointLevels() 方法提供对 Treemap 和 Sunburst 图表的数据点进行格式化的访问。
IChartDataPointLevelsManager 用于访问多层级类别——它表示 IChartDataPointLevel 对象的容器。基本上它是 IChartCategoryLevelsManager 的包装器,添加了针对数据点的特定属性。
IChartDataPointLevel 类有两个方法:get_Format() 和 get_Label(),它们提供对相应设置的访问。
显示数据点值
显示 “Leaf 4” 数据点的值:
auto dataPoints = chart->get_ChartData()->get_Series()->idx_get(0)->get_DataPoints();
dataPoints->idx_get(3)->get_DataPointLevels()->idx_get(0)->get_Label()->get_DataLabelFormat()->set_ShowValue(true);
设置数据点标签和颜色
将 “Branch 1” 数据标签设置为显示系列名称(“Series1”)而不是类别名称。然后将文本颜色设置为黄色:
auto branch1Label = dataPoints->idx_get(0)->get_DataPointLevels()->idx_get(2)->get_Label();
branch1Label->get_DataLabelFormat()->set_ShowCategoryName(false);
branch1Label->get_DataLabelFormat()->set_ShowSeriesName(true);
branch1Label->get_DataLabelFormat()->get_TextFormat()->get_PortionFormat()->get_FillFormat()->set_FillType(FillType::Solid);
branch1Label->get_DataLabelFormat()->get_TextFormat()->get_PortionFormat()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Yellow());
设置数据点分支颜色
更改 “Stem 4” 分支的颜色:
auto pres = System::MakeObject<Presentation>();
auto chart = pres->get_Slides()->idx_get(0)->get_Shapes()->AddChart(ChartType::Sunburst, 100.0f, 100.0f, 450.0f, 400.0f);
auto dataPoints = chart->get_ChartData()->get_Series()->idx_get(0)->get_DataPoints();
auto stem4branch = dataPoints->idx_get(9)->get_DataPointLevels()->idx_get(1);
stem4branch->get_Format()->get_Fill()->set_FillType(FillType::Solid);
stem4branch->get_Format()->get_Fill()->get_SolidFillColor()->set_Color(Color::get_Red());
pres->Save(u"pres.pptx", SaveFormat::Pptx);
常见问题
我可以更改 Sunburst/Treemap 中段的顺序(排序)吗?
不能。PowerPoint 会自动对段进行排序(通常按值降序、顺时针)。Aspose.Slides 复制了此行为:无法直接更改顺序;只能通过预处理数据来实现。
演示文稿主题如何影响段和标签的颜色?
图表颜色会继承演示文稿的主题/调色板,除非您显式设置填充/字体。为获得一致的效果,请在所需层级锁定纯色填充和文本格式。
导出为 PDF/PNG 时会保留自定义分支颜色和标签设置吗?
会。导出演示文稿时,图表的设置(填充、标签)会在输出格式中保留下来,因为 Aspose.Slides 会按照图表的格式进行渲染。
我能计算标签/元素的实际坐标,以在图表上方进行自定义覆盖放置吗?
可以。图表布局验证后,元素(例如 DataLabel)会提供实际的 X 和 Y 坐标,这有助于精确定位覆盖层。