📊 用 Python 把数据“画”成故事:Matplotlib 入门全攻略
❝数据不会说话?那就给它一支画笔!
大家好呀~今天咱们来聊聊Python 中最经典、最全能的数据可视化工具——Matplotlib。
别被名字吓到,“Matplotlib”听起来像数学课代表,其实它是个温柔又强大的绘图小能手,能把枯燥的数字变成会讲故事的图表!
无论你是想画一条平平无奇的折线,还是搞个炫酷词云展示老板最爱说的“赋能”,Matplotlib 都能帮你搞定。
废话不多说,直接上干货!
🎨 1. Matplotlib 是啥?为啥要学它?
想象一下:你辛辛苦苦分析了一堆数据,结果汇报时只甩出一串数字……
领导:“所以呢?”
这时候,一张清晰的图胜过千言万语!
Matplotlib 就是那个帮你把“所以呢”变成“哇塞!”的神器。
它是纯 Python 写的第三方库,风格像 MATLAB,但更亲民。
支持线图、散点图、饼图、直方图、箱线图……甚至雷达图、流向图!
图形质量高到可以直接拿去发论文 or 做 PPT!
❝💡 小贴士:使用前记得先装好
numpy,它是 Matplotlib 的“左膀右臂”。
import matplotlib.pyplot as plt import numpy as np🖼️ 2. 画布与子图:你的“画纸”怎么安排?
就像画画前要选画布大小,Matplotlib 也允许你自定义画布:
plt.figure(figsize=(9, 6)) # 9英寸宽,6英寸高想一次画多个图?用子图(subplot)!
比如你想对比“夏天 vs 冬天”的气温变化:
fig, axes = plt.subplots(1, 2) # 1行2列 axes[0].plot([30, 35, 33]) # 夏天 axes[1].plot([5, 2, -1]) # 冬天 plt.show()❝🌰 生活类比:这就像你在手机相册里拼图——左边是你吃火锅的照片,右边是你滑雪的照片,一张图讲两个故事!
✍️ 3. 给图表“化妆”:标题、坐标轴、图例
画完图别急着发朋友圈,先加点“妆容”:
plt.plot([1, 2, 3], [1, 4, 9]) plt.title("我的收入增长曲线(梦想版)") plt.xlabel("月份") plt.ylabel("存款(万元)") plt.legend(["真实情况"]) # 记住:legend 要在 plot 之后! plt.show()❝⚠️ 注意:图例(legend)必须在画图之后调用,否则它会一脸懵:“我该标谁?”
🎨 4. 线条样式大赏:颜色、线型、标记点
Matplotlib 的线条可不止“黑线”一种!你可以:
换颜色:
'b'(蓝)、'r'(红)、'g'(绿)……甚至'orange'换线型:
'-'(实线)、'--'(虚线)、'-.'(点划线)加标记:
'o'(圆圈)、'*'(星星)、'^'(三角形)
x = np.linspace(0, 10, 20) plt.plot(x, np.sin(x), color='purple', linestyle='--', marker='*', markersize=8) plt.show()❝🌈 小彩蛋:
alpha=0.5可以让线条半透明,适合叠图时看清重叠部分!
📉 5. 常见图表全家福
🔹 折线图(Line Chart)
最适合看趋势,比如股价、温度、你的体重(希望是下降的)。
days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'] coffee = [2, 3, 5, 4, 6] plt.plot(days, coffee, marker='☕') plt.title("本周咖啡摄入量(续命指数)")🔸 散点图(Scatter Plot)
看两个变量有没有“暧昧关系”。
x = np.random.randn(100) y = 2 * x + np.random.randn(100) plt.scatter(x, y, c='red', alpha=0.6) plt.title("身高 vs 篮球命中率?")📊 直方图(Histogram)
看数据分布,比如全班考试成绩。
scores = np.random.normal(75, 10, 1000) # 平均75,标准差10 plt.hist(scores, bins=30, color='skyblue', edgecolor='black') plt.title("期末考试成绩分布")🥧 饼图(Pie Chart)
展示占比,比如你的时间分配:
labels = ['刷手机', '摸鱼', '学习', '睡觉'] sizes = [40, 30, 10, 20] explode = (0.1, 0, 0, 0) # 让“刷手机”突出一点(心虚了) plt.pie(sizes, labels=labels, explode=explode, autopct='%1.1f%%') plt.title("我的一天(真实版)")📦 箱线图(Boxplot)
一眼看出数据的“五脏六腑”:最小值、Q1、中位数、Q3、最大值。
data = [np.random.normal(0, std, 100) for std in range(1, 4)] plt.boxplot(data, labels=['A组', 'B组', 'C组']) plt.title("三组实验数据对比")🎨 6. 高级技巧:填充、注释、中文显示
🌿 曲线下填充
比如突出“盈利区间”:
x = np.linspace(0, 5, 100) y = np.sin(x) plt.plot(x, y) plt.fill_between(x, 0, y, where=(y > 0), color='green', alpha=0.3) plt.title("正收益区域(绿色部分)")💬 添加注释
用箭头指向关键点:
plt.plot([1, 2, 3], [1, 4, 2]) plt.annotate('峰值!', xy=(2, 4), xytext=(2.5, 3), arrowprops=dict(facecolor='red', shrink=0.05))🇨🇳 显示中文?
默认字体不支持中文,会显示方框 ❌。解决方法:
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用黑体 plt.rcParams['axes.unicode_minus'] = False # 正常显示负号现在你就可以写《北京 vs 上海房价对比》这种标题了!
📦 7. 保存与分享
画好了?赶紧保存!
plt.savefig('my_plot.png', dpi=300, bbox_inches='tight')dpi=300:高清打印级bbox_inches='tight':自动裁掉白边
☁️ 8. 彩蛋:词云(Word Cloud)
虽然严格来说不算 Matplotlib 原生功能,但配合wordcloud+jieba,你可以生成这样的效果:
❝“老板最爱说:‘对齐’、‘闭环’、‘抓手’、‘赋能’……”
from wordcloud import WordCloud import jieba text = "赋能 对齐 闭环 抓手 赋能 降本增效" words = ' '.join(jieba.cut(text)) wc = WordCloud(font_path='simhei.ttf').generate(words) plt.imshow(wc, interpolation='bilinear') plt.axis("off")❝💬 词云虽好,可不要用来吐槽老板哦~(除非你已提离职)
✅ 总结:Matplotlib 一句话口诀
❝画布子图先搭台,
折线散点直方来,
饼图箱线各显摆,
标题注释加图例,
中文保存别忘改,
数据从此会表白!
🎉 现在,轮到你了!
打开你的 Jupyter Notebook,敲下第一行plt.plot(),
让数据开始“说话”吧!
如果你觉得这篇推文有用,欢迎点赞、转发,让更多人告别“表格恐惧症”!