领导要看图表?Excel做图又慢又丑?Python让你一键生成专业级数据可视化!
陈校长每次开行政会都要准备这些:
以前他用Excel:
三张图,折腾一上午!
今天教你用3行代码画出上面所有图表:
import pandas as pdimport matplotlib.pyplot as plt# 1. 折线图:成绩变化趋势成绩趋势 = pd.DataFrame({'年份': [2021,2022,2023], '平均分': [85,88,92]})成绩趋势.plot(x='年份', y='平均分', kind='line', marker='o')plt.title('近三年全校平均分趋势')plt.show()# 2. 饼图:部门经费占比经费 = pd.DataFrame({'部门': ['教学', '科研', '行政'], '金额': [45,30,25]})经费.plot(x='部门', y='金额', kind='pie', autopct='%1.1f%%')plt.title('各部门经费占比')plt.show()# 3. 柱状图:班级优秀率对比优秀率 = pd.DataFrame({'班级': ['三(1)', '三(2)', '三(3)'], '优秀率': [45, 52, 38]})优秀率.plot(x='班级', y='优秀率', kind='bar', color='skyblue')plt.title('各班级优秀率对比')plt.ylabel('百分比 (%)')plt.show()看懂了吗?
3种图表,9行代码,比Excel快10倍!
# 在命令行或终端运行:# pip install matplotlib pandasimport pandas as pdimport matplotlib.pyplot as plt# 准备数据数据 = pd.DataFrame({'月份': ['1月', '2月', '3月', '4月'],'访问量': [1200, 1350, 1400, 1580]})# 一行代码画折线图数据.plot(x='月份', y='访问量', kind='line', marker='o', color='red')plt.title('网站月度访问量趋势')plt.xlabel('月份')plt.ylabel('访问量')plt.grid(True) # 添加网格线plt.show()参数解释:
# 准备数据销售数据 = pd.DataFrame({'产品': ['A', 'B', 'C', 'D'],'销售额': [4500, 3800, 5200, 4100]})# 画柱状图销售数据.plot(x='产品', y='销售额', kind='bar', color=['blue', 'green', 'red', 'orange'])plt.title('各产品销售额对比')plt.xlabel('产品')plt.ylabel('销售额(元)')plt.xticks(rotation=0) # X轴标签不旋转plt.show()# 水平柱状图(条形图)销售数据.plot(x='产品', y='销售额', kind='barh', color='skyblue')plt.title('各产品销售额对比(水平)')plt.show()# 准备数据占比数据 = pd.DataFrame({'类别': ['教学', '科研', '行政', '后勤'],'金额': [45, 30, 15, 10]})# 画饼图(注意:饼图不需要x轴,直接用数据)占比数据.set_index('类别')['金额'].plot(kind='pie', autopct='%1.1f%%', # 显示百分比 startangle=90, # 起始角度 shadow=True) # 加阴影plt.title('各部门经费占比')plt.ylabel('') # 隐藏y轴标签plt.show()关键点:饼图需要把类别设为索引,再用单列数据绘图。
import pandas as pdimport matplotlib.pyplot as plt# 创建一个班级成绩表班级成绩 = pd.DataFrame({'班级': ['三(1)', '三(2)', '三(3)', '三(4)'],'语文': [85, 82, 88, 79],'数学': [90, 85, 92, 84],'英语': [88, 80, 86, 82]})print("📋 班级成绩数据:")print(班级成绩)班级成绩.plot(x='班级', y='语文', kind='bar', color='orange')plt.title('各班级语文平均分')plt.ylabel('分数')plt.xticks(rotation=0)plt.show()运行后你会看到一张漂亮的柱状图!
# 模拟某学生历次考试成绩小明成绩 = pd.DataFrame({'考试': ['月考1', '月考2', '期中', '月考3', '期末'],'语文': [78, 82, 85, 88, 92],'数学': [85, 88, 86, 90, 94],'英语': [80, 83, 87, 89, 91]})# 设置考试为索引,方便绘图小明成绩.set_index('考试', inplace=True)# 画折线图(一次画出所有科目)小明成绩.plot(kind='line', marker='o', linewidth=2)plt.title('小明本学期成绩变化趋势')plt.ylabel('分数')plt.grid(True)plt.legend(loc='lower right') # 图例位置plt.show()# 保存图表plt.savefig('小明成绩趋势图.png', dpi=300, bbox_inches='tight')print("✅ 图表已保存:小明成绩趋势图.png")知识点:
# 某学校年度经费数据经费数据 = pd.DataFrame({'部门': ['教学部', '科研部', '行政部', '后勤部', '图书馆'],'预算': [350, 180, 120, 80, 70] # 单位:万元})# 画饼图colors = ['#ff9999', '#66b3ff', '#99ff99', '#ffcc99', '#c2c2f0']经费数据.set_index('部门')['预算'].plot(kind='pie', autopct='%1.1f%%', startangle=90, colors=colors, explode=[0.05, 0, 0, 0, 0], # 突出显示教学部 shadow=True)plt.title('2023年度各部门经费预算占比', fontsize=16, fontweight='bold')plt.ylabel('')plt.axis('equal') # 保证饼图是正圆plt.tight_layout()plt.show()# 保存plt.savefig('经费预算饼图.png', dpi=300, bbox_inches='tight')美化参数:
# 使用之前的班级成绩数据班级成绩 = pd.DataFrame({'班级': ['三(1)', '三(2)', '三(3)', '三(4)'],'语文': [85, 82, 88, 79],'数学': [90, 85, 92, 84],'英语': [88, 80, 86, 82]})# 画分组柱状图班级成绩.set_index('班级').plot(kind='bar', figsize=(10,6))plt.title('各班级三科成绩对比', fontsize=16)plt.ylabel('分数')plt.xlabel('班级')plt.xticks(rotation=0)plt.legend(title='科目')plt.grid(axis='y', linestyle='--', alpha=0.7)plt.tight_layout()plt.show()效果:每个班级有3根柱子并排,代表语文、数学、英语,方便对比。
# 创建画布和子图fig, axes = plt.subplots(2, 2, figsize=(12, 10))fig.suptitle('学校数据分析仪表盘', fontsize=18)# 子图1:成绩趋势(折线图)成绩趋势 = pd.DataFrame({'年份': [2021,2022,2023], '平均分': [85,88,92]})成绩趋势.plot(x='年份', y='平均分', ax=axes[0,0], marker='o', color='red')axes[0,0].set_title('近三年平均分趋势')axes[0,0].grid(True)# 子图2:经费占比(饼图)经费 = pd.DataFrame({'部门': ['教学', '科研', '行政'], '金额': [45,30,25]})经费.set_index('部门')['金额'].plot(kind='pie', ax=axes[0,1], autopct='%1.1f%%')axes[0,1].set_title('部门经费占比')axes[0,1].set_ylabel('')# 子图3:班级优秀率(柱状图)优秀率 = pd.DataFrame({'班级': ['三(1)', '三(2)', '三(3)'], '优秀率': [45, 52, 38]})优秀率.plot(x='班级', y='优秀率', kind='bar', ax=axes[1,0], color='green')axes[1,0].set_title('班级优秀率')axes[1,0].set_ylabel('百分比')# 子图4:各科平均分(柱状图)各科平均 = pd.DataFrame({'科目': ['语文', '数学', '英语'], '平均分': [83.5, 87.8, 84.0]})各科平均.plot(x='科目', y='平均分', kind='bar', ax=axes[1,1], color='orange')axes[1,1].set_title('各科平均分')axes[1,1].set_ylabel('分数')plt.tight_layout()plt.show()一张图展示多个分析结果,适合做报告!
kind='line' | ||
kind='bar' | ||
kind='barh' | ||
kind='pie' | ||
kind='scatter' | ||
kind='area' | ||
kind='hist' | ||
kind='box' |
✅ 核心技能
✅ 办公应用场景
✅ 效率对比
# 某学生5次考试数学成绩数学成绩 = pd.DataFrame({'考试': ['第1次', '第2次', '第3次', '第4次', '第5次'],'分数': [72, 78, 85, 88, 94]})# 任务:画折线图,添加标题"数学成绩进步趋势",并保存为图片# 四个班级的数学平均分数学平均 = pd.DataFrame({'班级': ['三(1)', '三(2)', '三(3)', '三(4)'],'平均分': [86.5, 84.2, 89.1, 81.7]})# 任务:画柱状图,X轴为班级,Y轴为平均分,标题"各班数学平均分对比"# 学校教师职称分布职称数据 = pd.DataFrame({'职称': ['高级', '中级', '初级', '实习'],'人数': [12, 28, 15, 5]})# 任务:画饼图,显示百分比,标题"教师职称分布"# 使用上面三个任务的数据,用子图画在一张图上(2行2列,最后一个空着或放其他数据)明天学Python自动化办公综合实战!
把之前学过的所有技能串起来,打造你的自动化办公系统!
回复「Py-Day」获取今日挑战题解及完整代码
评论区作业:晒出你画的图表截图,看看谁的最漂亮!👇