python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python Word创建图表

使用Python在Word文档中创建图表的方法

作者:大丸子

在现代办公自动化场景中,将数据可视化为图表并嵌入 Word 文档已成为一项常见需求,本文将深入探讨如何使用 Python 在 Word 文档中创建各种类型的图表,并对其进行样式定制和数据配置,需要的朋友可以参考下

在现代办公自动化场景中,将数据可视化为图表并嵌入 Word 文档已成为一项常见需求。无论是生成销售报告、制作数据分析文档,还是创建项目进度汇报,programmatically 在 Word 中插入图表都能显著提升工作效率。本文将深入探讨如何使用 Python 在 Word 文档中创建各种类型的图表,并对其进行样式定制和数据配置。

可通过 pip 安装:pip install spire.doc.free

环境准备

本文所使用的示例基于 Free Spire.Doc for Python,在开始之前,需要安装该库。可通过 pip 安装:

pip install spire.doc.free

安装完成后,即可在 Python 脚本中导入相关模块开始工作。

基础架构:文档与图表对象模型

在使用 Spire.Doc 创建图表前,需要了解其基本的对象层次结构:

基本操作流程为:创建文档 → 添加节 → 添加段落 → 插入图表形状 → 配置图表数据 → 保存文档。

创建第一个图表:柱形图

柱形图是最常用的图表类型之一,适合比较不同类别的数据。以下示例展示了如何创建一个简单的柱形图:

from spire.doc import *
from spire.doc.common import *
# 创建文档对象
document = Document()
# 添加一个节
section = document.AddSection()
# 添加标题段落
section.AddParagraph().AppendText("Column chart.")
# 添加新段落用于放置图表
newPara = section.AddParagraph()
# 插入柱形图,指定宽度和高度(单位为点)
shape = newPara.AppendChart(ChartType.Column, float(500), float(300))
# 获取图表对象
chart = shape.Chart
# 清空默认的数据系列
chart.Series.Clear()
# 添加数据系列:名称、X 轴类别、Y 轴数值
chart.Series.Add("Test Series",
                 ["Word", "PDF", "Excel", "GoogleDocs", "Office"],
                 [float(1900000), float(850000), float(2100000), 
                  float(600000), float(1500000)])
# 设置 Y 轴数字格式
chart.AxisY.NumberFormat.FormatCode = "#,##0"
# 保存文档
document.SaveToFile("ColumnChart.docx", FileFormat.Docx)
document.Dispose()

结果预览:

关键点解析:

条形图:水平数据对比

条形图是柱形图的水平版本,特别适合类别名称较长或需要强调排名关系的场景:

# 创建条形图
chartShape = newPara.AppendChart(ChartType.Bar, float(400), float(300))
chart = chartShape.Chart
# 获取并设置图表标题
title = chart.Title
title.Text = "My Chart"
title.Show = True
title.Overlay = True  # 标题覆盖在图表上方
# 保存文档
document.SaveToFile("BarChart.docx", FileFormat.Docx)
document.Dispose()

结果预览:

标题的三个关键属性:

饼图:占比分析

饼图适合展示各部分占整体的比例关系,在财务分析和市场份额报告中应用广泛:

# 创建饼图
shape = newPara.AppendChart(ChartType.Pie, 500.0, 300.0)
chart = shape.Chart
# 添加单个数据系列(饼图通常只需要一个系列)
series = chart.Series.Add("Test Series", 
                          ["Word", "PDF", "Excel"],
                          [2.7, 3.2, 0.8])
# 保存文档
document.SaveToFile("PieChart.docx", FileFormat.Docx)
document.Dispose()

结果预览:

饼图的特点:

折线图:趋势展示

折线图擅长展示数据随时间或其他连续变量的变化趋势:

# 创建折线图
shape = newPara.AppendChart(ChartType.Line, 500.0, 300.0)
chart = shape.Chart
# 获取标题对象并设置
title = chart.Title
title.Text = "My Chart"
# 清空默认系列
seriesColl = chart.Series
seriesColl.Clear()
# 定义 X 轴类别
categories = ["C1", "C2", "C3", "C4", "C5", "C6"]
# 添加多个数据系列进行对比
seriesColl.Add("AW Series 1", categories, 
               [1.0, 2.0, 2.5, 4.0, 5.0, 6.0])
seriesColl.Add("AW Series 2", categories, 
               [2.0, 3.0, 3.5, 6.0, 6.5, 7.0])
# 保存文档
document.SaveToFile("LineChart.docx", FileFormat.Docx)
document.Dispose()

结果预览:

折线图的关键特性:

散点图:相关性分析

散点图用于展示两个变量之间的关系,在统计分析和科学研究中经常使用:

# 创建散点图
shape = newPara.AppendChart(ChartType.Scatter, 450.0, 300.0)
chart = shape.Chart
# 清空默认系列
chart.Series.Clear()
# 添加数据系列:X 值、Y 值
chart.Series.Add("Scatter chart", 
                 [1.0, 2.0, 3.0, 4.0, 5.0],
                 [1.0, 20.0, 40.0, 80.0, 160.0])
# 保存文档
document.SaveToFile("ScatterChart.docx", FileFormat.Docx)
document.Dispose()

结果预览:

散点图的特点:

气泡图:三维数据可视化

气泡图是散点图的扩展,通过气泡大小展示第三个维度的数据:

# 创建气泡图
shape = newPara.AppendChart(ChartType.Bubble, float(500), float(300))
chart = shape.Chart
# 清空默认系列
chart.Series.Clear()
# 添加数据系列:X 值、Y 值、气泡大小
series = chart.Series.Add("Test Series", 
                          [2.9, 3.5, 1.1, 4.0, 4.0],
                          [1.9, 8.5, 2.1, 6.0, 1.5],
                          [9.0, 4.5, 2.5, 8.0, 5.0])
# 保存文档
document.SaveToFile("BubbleChart.docx", FileFormat.Docx)
document.Dispose()

结果预览:

气泡图的独特之处:

3D 曲面图:立体数据展示

3D 曲面图提供立体的数据可视化效果,适合展示地形、温度分布等连续表面数据:

# 创建 3D 曲面图
shape = newPara.AppendChart(ChartType.Surface3D, 500.0, 300.0)
chart = shape.Chart
# 清空默认系列
chart.Series.Clear()
# 设置图表标题
chart.Title.Text = "My chart"
# 添加多个数据系列
chart.Series.Add("Series 1", 
                 ["Word", "PDF", "Excel", "GoogleDocs", "Office"],
                 [1900000.0, 850000.0, 2100000.0, 600000.0, 1500000.0])
chart.Series.Add("Series 2", 
                 ["Word", "PDF", "Excel", "GoogleDocs", "Office"],
                 [900000.0, 50000.0, 1100000.0, 400000.0, 2500000.0])
chart.Series.Add("Series 3", 
                 ["Word", "PDF", "Excel", "GoogleDocs", "Office"],
                 [500000.0, 820000.0, 1500000.0, 400000.0, 100000.0])
# 保存文档
document.SaveToFile("Surface3DChart.docx", FileFormat.Docx)
document.Dispose()

结果预览:

3D 曲面图的特点:

图表尺寸与定位

图表的尺寸和位置对于文档的整体布局至关重要。AppendChart() 方法的第二和第三个参数分别控制图表的宽度和高度,单位为点(point):

定位技巧:

# 在特定段落后插入图表
para = section.AddParagraph()
para.Format.SpaceAfter = 20  # 设置段后间距
# 插入图表
chartShape = para.AppendChart(ChartType.Column, float(500), float(300))

通过调整段落的间距属性,可以控制图表与周围文字的间隔,实现美观的排版效果。

数据系列管理

数据系列是图表的核心组成部分。Spire.Doc 提供了灵活的系列操作方法:

添加系列

# 添加单个系列
chart.Series.Add("系列名称", ["类别 1", "类别 2"], [100.0, 200.0])
# 添加多个系列
chart.Series.Add("系列 A", categories, valuesA)
chart.Series.Add("系列 B", categories, valuesB)

清空系列

在添加自定义数据前,通常需要清空默认的系列:

chart.Series.Clear()

访问系列集合

可以通过 Series 属性访问系列集合进行更复杂的操作:

seriesColl = chart.Series
# 对系列集合进行操作

坐标轴格式化

坐标轴的显示格式直接影响图表的可读性。Spire.Doc 允许对坐标轴进行精细的格式控制:

# 设置 Y 轴数字格式(千位分隔)
chart.AxisY.NumberFormat.FormatCode = "#,##0"
# 设置百分比格式
chart.AxisY.NumberFormat.FormatCode = "0%"
# 设置小数位数
chart.AxisY.NumberFormat.FormatCode = "0.00"

常见的格式代码:

完整实战示例

以下是一个综合示例,展示了如何在实际项目中创建包含多种图表的报告文档:

from spire.doc import *
from spire.doc.common import *
def create_sales_report():
    # 创建文档
    doc = Document()
    section = doc.AddSection()
    # 添加标题
    title_para = section.AddParagraph()
    title_para.AppendText("2024 Sales Report")
    title_para.Format.HorizontalAlignment = ShapeHorizontalAlignment.Center
    # 添加柱形图
    section.AddParagraph().AppendText("\nQuarterly Sales:")
    col_para = section.AddParagraph()
    col_chart = col_para.AppendChart(ChartType.Column, float(500), float(300))
    col_chart.Chart.Series.Clear()
    col_chart.Chart.Series.Add("Sales", 
                               ["Q1", "Q2", "Q3", "Q4"],
                               [150000.0, 220000.0, 180000.0, 250000.0])
    col_chart.Chart.AxisY.NumberFormat.FormatCode = "$#,##0"
    # 添加饼图
    section.AddParagraph().AppendText("\nProduct Distribution:")
    pie_para = section.AddParagraph()
    pie_chart = pie_para.AppendChart(ChartType.Pie, float(400), float(300))
    pie_chart.Chart.Series.Add("Products",
                               ["Product A", "Product B", "Product C"],
                               [45.0, 35.0, 20.0])
    # 保存文档
    doc.SaveToFile("Sales_Report.docx", FileFormat.Docx)
    doc.Dispose()
create_sales_report()

结果预览:

常见问题与解决方案

图表显示不完整

确保段落的行距设置适当,避免图表被裁剪:

para.Format.LineUnitAfter = 1  # 增加段后行距

数据精度问题

始终将数值显式转换为 float 类型:

values = [float(x) for x in raw_values]

中文标签显示

Spire.Doc 完全支持 Unicode 字符,可以直接使用中文字符串作为类别标签或标题。

总结

在 Word 文档中 programmatically 创建图表是办公自动化的重要技能。通过掌握 Spire.Doc for Python 提供的图表 API,可以实现:

关键要点回顾:

掌握这些技能后,你可以进一步探索图表标题样式、图例位置、数据标签、颜色主题等高级定制功能,构建出功能完备的文档自动化生成系统。

以上就是使用Python在Word文档中创建图表的方法的详细内容,更多关于Python Word创建图表的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文