Excel图表是数据可视化的起点。用Python自动化生成图表,比手动拖拽快10倍,而且每次格式完全一致。
今天用openpyxl把所有常用图表类型讲透。
👇 看完本文你能学到什么?
1. 柱状图/折线图/饼图/组合图的完整代码
2. 图表样式自定义全攻略
3. 自动生成图表并嵌入报表
💡 文末有彩蛋:附赠图表模板代码,填入数据即出图
一、柱状图(BarChart)
from openpyxl.chart import BarChart, Reference wb = Workbook() ws = wb.active # 准备数据 data = [ ['品类', '销售额'], ['电子', 150000], ['服装', 80000], ['食品', 120000], ['家居', 60000], ['美妆', 45000] ] for row in data: ws.append(row) # 创建柱状图 chart = BarChart() chart.type = 'col' # 垂直柱状图 chart.title = '各品类销售额' chart.y_axis.title = '销售额(元)' chart.x_axis.title = '品类' chart.style = 10 # 预定义样式 # 数据范围 data_ref = Reference(ws, min_col=2, min_row=1, max_row=6) cats_ref = Reference(ws, min_col=1, min_row=2, max_row=6) chart.add_data(data_ref, titles_from_data=True) chart.set_categories(cats_ref) # 调整大小和位置 chart.width = 18 chart.height = 12 ws.add_chart(chart, 'D2') wb.save('柱状图.xlsx')二、折线图(LineChart)
from openpyxl.chart import LineChart chart = LineChart() chart.title = '月度销售趋势' chart.y_axis.title = '销售额' chart.style = 10 data = Reference(ws, min_col=2, max_col=3, min_row=1, max_row=13) cats = Reference(ws, min_col=1, min_row=2, max_row=13) chart.add_data(data, titles_from_data=True) chart.set_categories(cats) # 添加数据标签 from openpyxl.chart.series import DataPoint chart.series[0].graphicalProperties.line.width = 25000 # 线宽(EMU单位) ws.add_chart(chart, 'E2')三、饼图(PieChart)
from openpyxl.chart import PieChart chart = PieChart() chart.title = '品类销售占比' data = Reference(ws, min_col=2, min_row=1, max_row=6) cats = Reference(ws, min_col=1, min_row=2, max_row=6) chart.add_data(data, titles_from_data=True) chart.set_categories(cats) # 显示百分比标签 from openpyxl.chart.series import DataLabelList chart.dataLabels = DataLabelList() chart.dataLabels.showPercent = True chart.dataLabels.showCatName = True ws.add_chart(chart, 'D2')四、组合图(柱状图+折线图)
from openpyxl.chart import BarChart, LineChart from openpyxl.chart.series import SeriesLabel # 创建柱状图 bar = BarChart() data1 = Reference(ws, min_col=2, min_row=1, max_row=13) bar.add_data(data1, titles_from_data=True) # 创建折线图 line = LineChart() data2 = Reference(ws, min_col=3, min_row=1, max_row=13) line.add_data(data2, titles_from_data=True) # 折线图叠加到柱状图上 bar.y_axis.crosses = 'min' line.y_axis.axId = 200 line.y_axis.crosses = 'max' bar += line # 合并 ws.add_chart(bar, 'E2')常见疑问FAQ
Q: openpyxl 图表和 matplotlib 选哪个?
A: 报表用 openpyxl(嵌入Excel),分析探索用 matplotlib/seaborn(交互式更好看)。
Q: 图表太多Excel文件太大?
A: 每个图表大约增加50-100KB。超过20个图表建议单独放一个Sheet或改用图片。
今日小结
三种图表核心代码:BarChart → LineChart → PieChart,每种都是 Reference + add_data + set_categories 三步走。
今日小练习
1. 用你自己的数据画一张品类销售额柱状图。
2. 画一张月度趋势折线图,加上数据标签。
3. 做一个组合图:柱状图显示销售额,折线图显示利润率。
📌 往期精选:
👉 用openpyxl打造带格式的自动化报表
🔔 关注公众号,回复「图表」领取:图表学习手册
(点击公众号底部菜单 → 领取资料)
夜雨聆风