如何在 .NET 中使用图表
本指南展示了如何使用 Aspose.Words FOSS for .NET 插入原生 Word 图表并控制其外观——隐藏图例和坐标轴、固定数值轴刻度,然后选择不同的图表类型并格式化数据标签和单个数据点。Aspose.Words FOSS for .NET 可通过 NuGet 获取,或从源码构建。
分步指南
步骤 1:获取库
克隆仓库并构建 Aspose.Words.sln 在 Release 配置下,随后将项目引用添加到 Aspose.Words.csproj 从您自己的 .NET 项目中,如在 安装指南.
步骤 2:插入图表并简化其外观
DocumentBuilder.InsertChart(chartType, width, height) 在光标处插入一个图表形状并返回其包含的 Shape;其 Chart 属性是您要配置的 Chart 对象,AxisX、AxisY、Legend 和 Title 是其主要子对象。图表类型位于 Aspose.Words.Drawing.Charts 命名空间中,与核心的 Aspose.Words 命名空间并列。在新的 Document 上创建一个最小的、可直接用于演示的 ChartType.Bar 图表,通常需要将 Legend.Position 设置为 LegendPosition.None,在 AxisY 和 AxisX 上设置 Hidden 和 HasMajorGridlines,将 Title.Show 设为 false,在调用 Series.Add(seriesName, categories, values) 之前使用 Series.Clear() 清除占位符 ChartSeriesCollection,将 AxisY.Scaling.Maximum 锁定到固定的 AxisBound 而不是让其自动缩放,然后使用 Document.Save 写入结果。完整示例——Document、DocumentBuilder、Chart、AxisX、AxisY、Legend、Title、ChartSeriesCollection、AxisBound 和 Document.Save——如下所示:
using Aspose.Words;
using Aspose.Words.Drawing.Charts;
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
Shape shape = builder.InsertChart(ChartType.Bar, 432, 252);
Chart chart = shape.Chart;
chart.Legend.Position = LegendPosition.None;
ChartSeriesCollection seriesColl = chart.Series;
chart.AxisY.Hidden = true;
chart.AxisY.HasMajorGridlines = false;
chart.AxisX.Hidden = true;
chart.Title.Show = false;
seriesColl.Clear();
chart.AxisY.Scaling.Maximum = new AxisBound(100);
string[] categories = new string[] { "AW Category 1" };
seriesColl.Add("AW Series 1", categories, new double[] { 30 });
doc.Save("chart.docx");这会构建一个 Document,插入一个 ChartType.Bar 图表,将 Chart.Legend.Position 设置为 LegendPosition.None 以隐藏图例,将 Hidden = true 和 HasMajorGridlines = false 设置在 chart.AxisY 上,将 Hidden = true 设置在 chart.AxisX 上,设置 chart.Title.Show = false,使用 seriesColl.Clear() 清除占位系列,通过 chart.AxisY.Scaling.Maximum = new AxisBound(100) 将数值轴固定为 100 最大值,使用 seriesColl.Add(seriesName, categories, values) 添加一个真实系列,并使用 Document.Save 写入结果。
步骤 3:选择不同的图表类型
ChartType 包含标准的 Word 图表系列——Line、Bar、Column(以及 Stacked、PercentStacked、3D 变体),Pie、PieOfPie、Doughnut、Area、Scatter、Bubble、Radar、Stock、Surface,以及 Word 2016 类型的 Treemap、Sunburst、Histogram、Pareto、BoxAndWhisker 和 Waterfall。将您想要的值作为 chartType 参数传递给 InsertChart —— 插入后没有成员可以更改已有图表的类型,因此请提前选择正确的类型或替换形状。
步骤 4:添加并格式化数据标签
在配置 series.DataLabels(一个 ChartDataLabelCollection)之前先设置 series.HasDataLabels = true —— 当标签关闭时,它的显示切换不会产生可见效果。ShowValue、ShowCategoryName 和 ShowPercentage 控制显示哪些信息,而 Position 则决定它们相对于数据点的位置。
步骤 5:格式化单个数据点
索引到系列的 DataPoints(一个 ChartDataPointCollection),以获取单个 ChartDataPoint,并独立于该系列的其余部分设置其 Format、Marker、Explosion 或 InvertIfNegative。这就是在不重新样式整个系列的情况下突出显示单个柱形、切片或标记的方法。
常见问题与解决方案
新图表显示了意外的演示数据。 InsertChart 为图表填充占位系列。调用 chart.Series.Clear() 在添加您自己的系列之前。
Hiding AxisY 不会移除网格线。 Hidden 隐藏轴线和标签;网格线是单独的切换。设置 HasMajorGridlines = false (和 HasMinorGridlines = false 如果次要网格线也可见).
数据标签在设置后未出现 ShowValue = true. HasDataLabels 未先在系列上设置。设置 series.HasDataLabels = true,然后配置 series.DataLabels.
Scaling.Maximum 似乎没有生效. 确认您正在在正确的轴对象上设置 (chart.AxisY 针对大多数图表类型的数值轴),并且没有早期的代码路径会重置 Scaling 恢复到默认值 AxisBound().
常见问题解答
如何隐藏图表的图例?
设置 chart.Legend.Position = LegendPosition.None。
如何将坐标轴固定在特定范围而不是自动缩放?
在 chart.AxisX.Scaling 或 chart.AxisY.Scaling 上设置 AxisScaling.Minimum 和/或 AxisScaling.Maximum(两者均为 AxisBound 值)。
如何在不删除的情况下隐藏图表标题?
设置 chart.Title.Show = false。ChartTitle 对象及其 Text 保持不变;仅隐藏可见标题。
有哪些可用的图表类型?
ChartType 列出经典系列(Line、Bar、Column、Pie、Area、Scatter、Bubble、Radar、Stock、Surface,以及堆叠和 3D 变体),以及 Word 2016 类型(Treemap、Sunburst、Histogram、Pareto、BoxAndWhisker、Waterfall)。
我可以将某个数据点的格式设置为与其系列的其他点不同吗?
是的——通过索引进入 ChartSeries.DataPoints,并独立设置该 ChartDataPoint 的 Format、Marker 或 Explosion。