当前位置:首页>python>Day15:数据“美颜术”!用Python三行代码画出高大上图表

Day15:数据“美颜术”!用Python三行代码画出高大上图表

  • 2026-09-15 11:39:51
Day15:数据“美颜术”!用Python三行代码画出高大上图表

领导要看图表?Excel做图又慢又丑?Python让你一键生成专业级数据可视化!

一、先看这个真实场景

陈校长每次开行政会都要准备这些:

  1. 近三年各年级成绩变化趋势(折线图)
  2. 本学期各部门经费占比(饼图)
  3. 各班级优秀率对比(柱状图)

以前他用Excel:

  1. 选中数据 → 插入图表 → 选类型 ✓
  2. 调整颜色、字体、坐标轴 ✓
  3. 复制粘贴到PPT ✓
  4. 发现数据更新了……全部重做!

三张图,折腾一上午!

二、Python的“美颜”魔法

今天教你用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()

看懂了吗?

  • .plot() 是pandas自带的绘图方法
  • kind 参数指定图表类型:line折线、pie饼图、bar柱状
  • plt.title() 添加标题
  • plt.show() 显示图表

3种图表,9行代码,比Excel快10倍!

三、分解“魔法”:每步在干什么?

3.1 先安装必要的库(如果没装)

# 在命令行或终端运行:# pip install matplotlib pandas

3.2 基础折线图

import 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()

参数解释:

  • x:用作X轴的列名
  • y:用作Y轴的列名
  • kind='line':折线图
  • marker='o':数据点用圆圈标记
  • color:线条颜色
  • plt.grid(True):添加网格线,让图表更易读

3.3 柱状图

# 准备数据销售数据 = 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()

3.4 饼图

# 准备数据占比数据 = 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()

关键点:饼图需要把类别设为索引,再用单列数据绘图。

四、自己动手试试!

4.1 第一步:创建测试数据

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(班级成绩)

4.2 第二步:画语文成绩柱状图

班级成绩.plot(x='班级', y='语文', kind='bar', color='orange')plt.title('各班级语文平均分')plt.ylabel('分数')plt.xticks(rotation=0)plt.show()

运行后你会看到一张漂亮的柱状图!

五、办公实战1:学生成绩趋势分析(折线图)

# 模拟某学生历次考试成绩小明成绩 = 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")

知识点:

  • set_index('考试'):把考试名称设为行索引,这样plot会自动把索引作为X轴
  • 一次传入多列数据,会自动画多条线
  • plt.legend():显示图例
  • plt.savefig():保存图片

六、办公实战2:部门经费占比(饼图+美化)

# 某学校年度经费数据经费数据 = 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')

美化参数:

  • colors:自定义颜色列表
  • explode:突出显示某一块(0.05表示拉开5%半径)
  • shadow:阴影
  • fontsize / fontweight:标题字体大小粗细
  • axis('equal'):让饼图正圆

七、办公实战3:班级成绩对比(分组柱状图)

# 使用之前的班级成绩数据班级成绩 = 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参数
适用场景
折线图
kind='line'
趋势变化(成绩、销量随时间)
柱状图
kind='bar'
对比(班级、部门之间比较)
水平柱状图
kind='barh'
对比(类别名称较长时)
饼图
kind='pie'
占比(经费分配、生源构成)
散点图
kind='scatter'
相关性(身高与体重)
面积图
kind='area'
累积趋势
直方图
kind='hist'
数据分布(分数段人数)
箱线图
kind='box'
数据分布和异常值

十、重点总结:今天你学会了什么?

✅ 核心技能

  1. .plot(kind='...') - 一行代码画各种图表
  2. plt.title()、plt.xlabel() - 添加标题和标签
  3. plt.savefig() - 保存图表
  4. 子图 - 一页多图展示

✅ 办公应用场景

  1. 成绩分析:趋势折线图、班级对比柱状图
  2. 财务分析:部门占比饼图、预算对比柱状图
  3. 报告制作:仪表盘子图,一键生成多张图表
  4. 考勤分析:出勤率柱状图、迟到次数分布直方图

✅ 效率对比

任务
Excel操作
Python代码
画一张折线图
5步操作
1行代码
画一张饼图
5步操作
1行代码
画一张分组柱状图
插入图表+调整
1行代码
更新数据后重画
重新拖拽
重新运行代码

十一、今日挑战:动手做!

任务1:画折线图

# 某学生5次考试数学成绩数学成绩 = pd.DataFrame({'考试': ['第1次', '第2次', '第3次', '第4次', '第5次'],'分数': [72, 78, 85, 88, 94]})# 任务:画折线图,添加标题"数学成绩进步趋势",并保存为图片

任务2:画柱状图

# 四个班级的数学平均分数学平均 = pd.DataFrame({'班级': ['三(1)', '三(2)', '三(3)', '三(4)'],'平均分': [86.5, 84.2, 89.1, 81.7]})# 任务:画柱状图,X轴为班级,Y轴为平均分,标题"各班数学平均分对比"

任务3:画饼图

# 学校教师职称分布职称数据 = pd.DataFrame({'职称': ['高级', '中级', '初级', '实习'],'人数': [12, 28, 15, 5]})# 任务:画饼图,显示百分比,标题"教师职称分布"

进阶任务:综合报告

# 使用上面三个任务的数据,用子图画在一张图上(2行2列,最后一个空着或放其他数据)

十二、明日预告

明天学Python自动化办公综合实战!

  • 如何用Python自动处理每日报表?
  • 如何定时发送邮件带附件?
  • 如何批量生成Word/PDF报告?

把之前学过的所有技能串起来,打造你的自动化办公系统!


回复「Py-Day」获取今日挑战题解及完整代码

评论区作业:晒出你画的图表截图,看看谁的最漂亮!👇

最新文章

随机文章