乐于分享
好东西不私藏

Excel图表编程:柱状图、折线图、饼图完整指南

Excel图表编程:柱状图、折线图、饼图完整指南

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打造带格式的自动化报表


🔔 关注公众号,回复「图表」领取:图表学习手册

(点击公众号底部菜单 → 领取资料)