使用图表
使用图表
Aspose.Words FOSS for .NET 可以在绘图层中插入本机 Word 图表——与 Word 本身创建的相同 DrawingML 图表——作为形状。DocumentBuilder.InsertChart 创建该形状并返回它;形状的 Chart 属性公开系列、坐标轴、图例和格式。本指南涵盖创建图表、选择图表类型、处理系列和数据点、坐标轴和网格线以及格式化图表元素。
创建图表
调用 DocumentBuilder.InsertChart(chartType, width, height) 在光标处插入图表形状并返回包含的 Shape。其 Chart 属性是您要配置的 Chart 对象。新插入的图表带有占位演示系列,因此在使用 ChartSeriesCollection.Add(seriesName, categories, values) 添加真实数据之前,请清除 Chart.Series:
using Aspose.Words;
using Aspose.Words.Drawing.Charts;
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
Shape shape = builder.InsertChart(ChartType.Line, 432, 252);
Chart chart = shape.Chart;
// Delete default generated series.
chart.Series.Clear();
string[] categories = new string[] { "AW Category 1", "AW Category 2", "AW Category 3" };
chart.Series.Add("AW Series 1", categories, new double[] { 4.3, 2.5, 3.5 });
doc.Save("chart.docx");此示例构建一个 Document,使用 DocumentBuilder.InsertChart(ChartType.Line, 432, 252) 插入折线图形状,读取 shape.Chart 获取 Chart 对象,调用 chart.Series.Clear() 删除占位系列,使用 chart.Series.Add(seriesName, categories, values) 添加一个真实系列,并使用 Document.Save 写入结果。
图表类型
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;插入后无法更改现有图表的类型,除非替换形状。
系列和数据点
Chart.Series 是一个由 ChartSeries 对象组成的 ChartSeriesCollection。除了上面使用的 Add(seriesName, categories, values) 重载之外,ChartSeriesCollection 还提供了针对 X/Y 值对、日期和气泡大小的重载,以及 Insert、Remove(index) 和 Clear()。每个 ChartSeries 都公开了 DataPoints(一个 ChartDataPointCollection),用于逐点格式化——Format、Marker、Explosion 和 InvertIfNegative——以及 HasDataLabels / DataLabels,用于启用并配置 ChartDataLabelCollection(ShowValue、ShowCategoryName、ShowPercentage、Position)。
坐标轴和网格线
Chart.AxisX、AxisY 和 AxisZ 是 ChartAxis 对象(其中 Chart.Axes 作为用于遍历它们的 ChartAxisCollection)。每个坐标轴都有 HasMajorGridlines / HasMinorGridlines、MajorUnit / MinorUnit(具有匹配的 *IsAuto 标志)、Crosses / CrossesAt、CategoryType,以及用于标签字体和方向的 TickLabels 对象(AxisTickLabels)。ChartAxis.Title(ChartAxisTitle)通过其 Text 和 Show 属性设置坐标轴标题文本。
图例、标题和数据表
Chart.Title(ChartTitle)设置图表的整体标题——Text、Show 和 Font。Chart.Legend(ChartLegend)通过 Position(一个诸如 Bottom、Right 或 Top 的 LegendPosition 值)来控制图例是否显示以及显示位置,并公开各个 LegendEntries。Chart.DataTable(ChartDataTable)可以在绘图区域下方以表格形式显示底层系列值,包含 Show、HasLegendKeys 和边框切换。
格式化图表元素
大多数图表元素——系列、数据点、坐标轴、标题和图例——都公开一个类型为 ChartFormat 的 Format 属性,该属性进一步公开 Fill 和 Stroke 用于该元素的颜色,以及一个用于数据点标记形状的 ShapeType(ChartShapeType)。ChartFormat.SetDefaultFill() 将元素重置为基于主题的默认外观。
技巧与最佳实践
- 在添加真实数据之前,请始终清除或替换占位系列(
chart.Series.Clear())——新插入的图表已经带有示例数据。 - 使用与数据结构匹配的
ChartSeriesCollection.Add重载(类别、X/Y 对、日期或气泡大小),而不是强行使用类别/数值对。 - 在配置系列的
DataLabels集合之前先设置HasDataLabels = true——当标签关闭时,集合的显示属性不会产生可见效果。 - 在依赖网格线或坐标轴行为(在经典和 Word-2016 风格的图表之间有所不同)之前,请阅读
Chart.ChartSpace或检查特定的ChartType。 - 当您想重置元素外观时,建议使用
ChartFormat.SetDefaultFill()而不是手动清除每个填充属性。
常见问题
| 问题 | 原因 | 修复 |
|---|---|---|
| 新图表显示了意外的演示数据 | InsertChart 用占位系列为图表提供数据 | 在添加您自己的系列之前调用 chart.Series.Clear() |
| 数据标签未显示 | 在配置 DataLabels 之前,未在系列上设置 HasDataLabels | 设置 series.HasDataLabels = true,然后在 series.DataLabels 上配置 ShowValue/ShowCategoryName |
| 网格线在数值轴上不显示 | HasMajorGridlines/HasMinorGridlines 默认为该轴的 false | 设置 chart.AxisY.HasMajorGridlines = true(如有需要,设置 HasMinorGridlines) |
| 图例未出现 | Chart.Legend.Position 已设置为 LegendPosition.None | 将 Position 设置为 Bottom、Right、Top、Left 或 TopRight |
FAQ
如何在文档中插入图表?
调用 DocumentBuilder.InsertChart(chartType, width, height)。它返回包含的 Shape;读取其 Chart 属性以配置图表。
如何向图表添加数据?
使用 chart.Series.Clear() 清除占位符系列,然后调用 chart.Series.Add(seriesName, categories, values)(或其他 Add 重载之一,用于 X/Y、日期或气泡数据)。
有哪些可用的图表类型?
ChartType 包括经典系列(Line、Bar、Column、Pie、Area、Scatter、Bubble、Radar、Stock、Surface,以及它们的堆叠和 3D 变体)以及 Word 2016 的图表类型(Treemap、Sunburst、Histogram、Pareto、BoxAndWhisker、Waterfall)。
如何更改图例出现的位置?
将 Chart.Legend.Position 设置为 LegendPosition 值,例如 LegendPosition.Bottom 或 LegendPosition.Right。
我可以将单个数据点的格式设置为与其系列的其他点不同吗?
是的 — 索引到 ChartSeries.DataPoints(一个 ChartDataPointCollection),并独立于系列级别的格式设置该 ChartDataPoint 的 Format、Marker 或 Explosion。
API Reference 摘要
| 类/方法 | 描述 |
|---|---|
DocumentBuilder.InsertChart | 在光标处插入图表形状并返回它。 |
Chart | 通过 Shape.Chart 访问的图表配置对象。 |
ChartType | 可用图表类型的枚举(折线图、柱状图、饼图以及 Word-2016 图表类型)。 |
ChartSeriesCollection / ChartSeries | 图表的数据系列以及用于添加、插入或删除它们的方法。 |
ChartDataPointCollection / ChartDataPoint | 系列中每个点的格式设置。 |
ChartDataLabelCollection / ChartDataLabel | 图表点上显示的数值/类别标签。 |
ChartAxis / ChartAxisCollection | 轴配置 — 网格线、单位、交叉点、刻度标签。 |
ChartLegend / LegendPosition | 图例的可见性和位置。 |
ChartTitle | 图表的整体标题。 |
ChartDataTable | 可选的系列值表,显示在绘图区域下方。 |
ChartFormat | 大多数图表元素共享的填充、描边和形状格式。 |