第十四课:数据可视化——把数据画出来
入门 python教学 · 2026-10-21 · 阅读 2

第十一课我们算出了平均分、最高分——可数字是干巴巴的。班主任在家长会上从来不念分数表,而是甩一张图:谁高谁低、整体什么水平,一眼看穿。把数据画成图,就叫数据可视化。这一课用 Python 最常用的画图库 matplotlib,把你的数据变成图。
先装库(在终端里执行一次就行):
pip install matplotlib
一、第一张图:折线图
先画一周的气温变化,感受一下画图的基本套路:
import matplotlib.pyplot as plt
days = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
temp = [22, 24, 21, 19, 23, 26, 25]
plt.plot(days, temp) # 画折线:横轴天数,纵轴温度
plt.title("A Week of Temperatures")
plt.xlabel("Day")
plt.ylabel("Temperature")
plt.show() # 把图显示出来
套路就三步:准备两组数据 → 调用画图函数 → plt.show() 显示。横轴(x)和纵轴(y)的数据要一一对应,个数必须一样多。
但是有个大坑:标题用中文会变成方框!matplotlib 自带的字体不认识中文,要先加两行设置(Windows 电脑):
plt.rcParams["font.sans-serif"] = ["SimHei"] # 指定黑体,显示中文 plt.rcParams["axes.unicode_minus"] = False # 让负号正常显示
这两行写在 import 后面,以后每个画图程序都带上(Mac 电脑把字体换成 "Arial Unicode MS",Linux 换成 "DejaVu Sans" 配合安装的中文字体)。加上后,标题就能写中文了:
plt.title("一周气温变化")
plt.xlabel("星期")
plt.ylabel("气温(℃)")
二、柱状图:比高低
比较大小,柱状图最直观。把几位同学的成绩画出来:
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
names = ["小明", "小红", "小刚", "小丽"]
scores = [85, 92, 78, 88]
plt.bar(names, scores) # bar 就是柱状图
plt.title("小组成绩对比")
plt.xlabel("姓名")
plt.ylabel("成绩")
plt.ylim(0, 100) # 纵轴范围设为 0~100,看得更真实
plt.show()
注意那句 ylim:不设的话纵轴可能从 70 开始,78 分的柱子看起来只有 92 分的一半高——图表会"说谎",往往就藏在纵轴的起点里。看别人的图要多留个心眼,自己画图更要诚实。
三、饼图:看占比
想表达"各部分占总体的多少",用饼图。比如你一天 24 小时花在哪:
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
labels = ["睡觉", "上课", "写作业", "吃饭", "玩手机", "其他"]
hours = [8, 6, 3, 2, 2, 3]
plt.pie(hours, labels=labels, autopct="%.1f%%")
plt.title("我的一天")
plt.show()
autopct="%.1f%%" 是让每块饼上自动标出百分比(保留一位小数)。labels 和数据也是一一对应,别标错位。
四、三种图怎么选
| 图 | 函数 | 适合表达 | 例子 |
|---|---|---|---|
| 折线图 | plot | 随时间变化的趋势 | 一周气温、一学期成绩走势 |
| 柱状图 | bar | 不同对象的大小比较 | 各同学成绩、各班平均分 |
| 饼图 | pie | 各部分占总体的比例 | 时间分配、零花钱去向 |
选错图,意思就拧了:拿饼图画气温变化,谁也看不出趋势。记住这张表,画图就成功了一半。另外还有个常见的散点图 plt.scatter(x, y),看两个量的关系(比如身高和体重的分布),先混个脸熟。
五、实战:把小管家的成绩画成图
把第十二课存的 scores.txt 读回来(格式还记得吧:一行一个"姓名,成绩"),直接画成柱状图,还要存成图片文件——用 plt.savefig 替掉 plt.show:
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
names = []
scores = []
with open("scores.txt", "r", encoding="utf-8") as f:
for line in f:
line = line.strip()
if not line:
continue
name, score = line.split(",")
names.append(name)
scores.append(float(score))
avg = sum(scores) / len(scores)
plt.bar(names, scores)
plt.axhline(avg, color="red", linestyle="--") # 画一条平均分参考线
plt.title(f"全班成绩(平均分 {avg:.1f})")
plt.xlabel("姓名")
plt.ylabel("成绩")
plt.ylim(0, 100)
plt.savefig("score_chart.png") # 存成图片,而不是弹出来
print("图已保存为 score_chart.png")
运行完,程序目录里多出一张 score_chart.png:每个人的柱子、一条红色的平均线,谁在平均线上下,清清楚楚。这张图就是可以直接贴进作品区的成果了。
本课小结
· 画图三步:备数据 → 调函数 → show() 显示(或 savefig 存图)。
· 中文必备两行设置:指定中文字体 + 负号修正,忘了就是满屏方框。
· plot 看趋势、bar 比高低、pie 看占比;纵轴起点会让图"说谎",留意 ylim。
· axhline 能画参考线,平均分、及格线这类基准放上去特别有用。
练一练
1. 零花钱走势:把你最近 7 天的零花钱支出画成折线图,标题、坐标轴名字都用中文。
2. 我的作息饼图:仿照第三节,把你真实的一天 24 小时画成饼图,看看"玩手机"那一块有多大。
3. 挑战题:在实战的成绩图上再加一条绿色的 60 分及格线(再用一次 axhline),并在图标题里写上最高分同学的名字和分数(提示:第十三课的字符串拼接和第十一课的 max 都能用上)。
下一课是 Python 线的总装:把文件、函数、图表全合进"成绩小管家 Pro"。
学·教在线
小ta