Python openpyxl --绘制Excel图表

使用 openpyxl 库的 chart 模块绘制图表,比如条形图、折线图

系列

条形图

需要用到 chart 模块的两个类:

BarChart  : 绘制条形图
Reference : 引用表格中的数据

实现目标

14

绘制条形图

导入模块

1
2
3
4
5
6
7
from openpyxl import load_workbook
from openpyxl.chart import BarChart, Reference

# 打开表格
wb = load_workbook('./abc.xlsx')
# 获取活动表,通常是第一个工作表
ws = wb.active

确定图表类型

1
2
# 实例化BarChart
chart = BarChart()

BarChart : 条形图
LineChart : 折线图

引用表格中的金额

Reference(worksheet, min_row, max_row, min_col, max_col)

worksheet : 工作表对象
min_row : 起始行,默认第一行
max_row : 终止行
min_col : 起始列,默认第一列
max_col : 终止列

1
2
# 引用活动表第一行至第五行 第二列(B列)区域的数据
data = Reference(worksheet=ws, min_row=1, max_row=5, min_col=2, max_col=2)

16

如果行列太多不便读取时

1
2
3
4
# 以整数返回最大非空行
max_row = ws.max_row
# 以整数返回最大非空列
max_col = ws.max_column

将引用的金额添加到BarChart

BarChart对象.add_data(Reference,from_rows,titles_from_data)

Reference : 引用的数据
from_rows : 来自行

为 True  : 引用所选区域的 每行数据
为 False : 引用所选区域的 每列数据

titles_from_data : 图例名称来自数据,一般设置为True

为 True  : 需要多引用表格的数据来命名图例

17

为 False : 只需要引用绘制图表的数据,图例会自命名为系列1、系列2..

18

1
2
3
# 将金额加到BarChart对象
# 引用每列数据,多引用数据命名图例
chart.add_data(data, from_rows=False, titles_from_data=True)

图表位置

工作表对象.add_chart(BarChart对象,'单元格')
1
2
# 条形图放置位置,从左上角E2开始
ws.add_chart(chart, 'E2')

优化条形图

设置类别轴的标签

BarChart对象.set_categories(Reference对象)
1
2
3
4
# 引用活动表第二行至第五行 第一列(A列)区域的数据
cats = Reference(worksheet=ws, min_row=2, max_row=5, min_col=1, max_col=1)
# 设置类别轴的标签
chart.set_categories(cats)

19

设置XY轴标题

BarChart对象.x_axis.title = '标题'
BarChart对象.y_axis.title = '标题'
1
2
3
4
# 设置 x 轴的标题
chart.x_axis.title = "姓名"
# 设置 y 轴的标题
chart.y_axis.title = "金额"

20

设置条形图样式

BarChart对象.style = 整数

整数 取值范围为最小值1,最大值48

1
2
# 设置条形图样式
chart.style = 1

保存工作簿

工作簿对象.save('保存路径')

只是修改文件名相当于 重命名
修改了文件路径相当于 另存为

不保存则上序操作无效

1
2
# 在当前目录下保存工作簿
wb.save('./abc.xlsx')