如何使用 Python 在 Excel 中创建图表

如何使用 Python 在 Excel 中创建图表

图表将原始电子表格数据转化为可视化洞察。Aspose.Cells FOSS for Python 让您能够以编程方式创建柱形图、折线图、条形图和饼图,全面控制数据系列、类别标签、图表标题和位置,无需 Microsoft Excel。

为什么使用 Aspose.Cells FOSS 创建图表?

  1. 无需 Excel: 完全在 Python 中构建图表,适用于任何操作系统。
  2. 每种类型一个方法的 API: 使用 add_bar()add_line()add_pie()add_area() 等——每种图表类型对应一个方法。
  3. 命名系列: 使用 name=category_data= 关键字参数配置每个系列。
  4. 精确定位: 通过单元格坐标(top_row、left_col、bottom_row、right_col)控制图表边界。

分步指南

步骤 1:安装 Aspose.Cells FOSS for Python

pip install aspose-cells-foss

步骤 2:创建工作簿并填充数据

创建一个新的工作簿并将数值数据以及类别标签写入单元格:

from aspose.cells_foss import Workbook, Cell

workbook = Workbook()
ws = workbook.worksheets[0]
ws.name = "Sales Data"

##Category labels in column A (rows 2-5, leaving row 1 for a header)
ws.cells["A1"].value = "Quarter"
ws.cells["A2"].value = "Q1"
ws.cells["A3"].value = "Q2"
ws.cells["A4"].value = "Q3"
ws.cells["A5"].value = "Q4"

##Revenue series in column B
ws.cells["B1"].value = "Revenue"
ws.cells["B2"].value = 50000
ws.cells["B3"].value = 62000
ws.cells["B4"].value = 71000
ws.cells["B5"].value = 89000

##Expense series in column C
ws.cells["C1"].value = "Expenses"
ws.cells["C2"].value = 32000
ws.cells["C3"].value = 38000
ws.cells["C4"].value = 41000
ws.cells["C5"].value = 47000

步骤 3:添加柱形图

使用 ws.charts.add_bar(top_row, left_col, bottom_row, right_col) 插入柱状图。该方法直接返回一个图表对象:

##Insert a column chart occupying rows 7-22, columns 0-7
chart = ws.charts.add_bar(6, 0, 22, 7)

行和列索引是从零开始的。


步骤 4:配置数据系列

使用 chart.n_series.add() 并通过关键字参数添加每个数据系列:

##Add Revenue series
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")

##Add Expenses series
chart.n_series.add("C2:C5", category_data="A2:A5", name="Expenses")

category_data 参数指定 x 轴标签的单元格范围。name 参数设置系列图例标签。


步骤 5:设置图表标题和类别数据

将图表标题设置为普通字符串:

chart.title = "Quarterly Sales vs Expenses"
chart.category_data = "A2:A5"   # x-axis labels at chart level
chart.show_legend = True
chart.legend_position = "bottom"

第6步:保存工作簿

workbook.save("sales_chart.xlsx")
print("Workbook with chart saved.")

完整柱形图示例:

from aspose.cells_foss import Workbook, Cell

workbook = Workbook()
ws = workbook.worksheets[0]

##Data
labels = ["Q1", "Q2", "Q3", "Q4"]
revenue = [50000, 62000, 71000, 89000]
expenses = [32000, 38000, 41000, 47000]

ws.cells["A1"].value = "Quarter"
ws.cells["B1"].value = "Revenue"
ws.cells["C1"].value = "Expenses"

for i, (label, rev, exp) in enumerate(zip(labels, revenue, expenses), start=2):
    ws.cells[f"A{i}"].value = label
    ws.cells[f"B{i}"].value = rev
    ws.cells[f"C{i}"].value = exp

chart = ws.charts.add_bar(6, 0, 22, 7)
chart.title = "Quarterly Sales vs Expenses"
chart.category_data = "A2:A5"
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")
chart.n_series.add("C2:C5", category_data="A2:A5", name="Expenses")
chart.show_legend = True
chart.legend_position = "bottom"

workbook.save("quarterly_chart.xlsx")

步骤 7:创建折线图

相同的模式适用于 add_line()

from aspose.cells_foss import Workbook, Cell

workbook = Workbook()
ws = workbook.worksheets[0]

months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
revenue = [42000, 47500, 53000, 49000, 61000, 68000]

ws.cells["A1"].value = "Month"
ws.cells["B1"].value = "Revenue"

for i, (m, r) in enumerate(zip(months, revenue), start=2):
    ws.cells[f"A{i}"].value = m
    ws.cells[f"B{i}"].value = r

chart = ws.charts.add_line(8, 0, 24, 8)
chart.title = "Monthly Revenue Trend"
chart.category_data = "A2:A7"
chart.n_series.add("B2:B7", category_data="A2:A7", name="Revenue")
chart.show_legend = True

workbook.save("trend_chart.xlsx")

常见问题及解决方案

1. 图表显示为空白或空的

Cause: 传递给 n_series.add() 的数据范围不包含值,或单元格范围字符串不正确。
Fix: 验证单元格范围与您的数据匹配。检查 ws.cells["B2"].value 不是 None

2. 类别标签未显示在 x 轴上

Cause: chart.category_data 未设置,或范围指向空单元格。
Fix: 在 A 列包含标签字符串的地方设置 chart.category_data = "A2:A5"

3. 图表位置与数据重叠

Cause: add_bar() 中的行边界与数据区域重叠。
Fix: 将图表放在数据下方:ws.charts.add_bar(data_last_row + 2, 0, data_last_row + 18, 7)

4. AttributeError: 'ChartCollection' object has no attribute 'add'

原因: FOSS 库使用每种类型一个方法的 API,而不是 add(ChartType.COLUMN, ...)
修复: 使用 ws.charts.add_bar(...)ws.charts.add_line(...)ws.charts.add_pie(...)ws.charts.add_area(...)


常见问题

哪些图表类型受支持?

使用 add_bar()add_line()add_pie()add_area()add_stock() 来处理最常用的类型。这五种类型具备完整的 XML 序列化支持。请查看 ChartCollection 类,以获取可用的 add_* 方法的完整列表。

我可以在现有的 Excel 文件中创建图表吗?

是的。使用 Workbook("existing.xlsx") 加载工作簿,访问目标工作表,并使用适当的 ws.charts.add_*() 方法添加图表。

我如何设置图表标题?

分配一个普通字符串:chart.title = "My Chart Title"。没有.text子属性:标题本身就是该字符串。

这种方法与 pandas 兼容吗?

是的。将 pandas DataFrame 的值写入循环中的单元格,然后在该数据范围上添加图表。


相关资源:

 中文