欢迎来到Python学习的第101天!今天我们将解锁数据分析与展示的核心技能——Matplotlib。如果说 Pandas 是处理数据的“大脑”,那么 Matplotlib 就是展示数据的“嘴巴”。它能将枯燥的数字转化为直观的图表。结合你之前学过的 OOP(面向对象编程) 知识,你会发现 Matplotlib 的底层设计完美契合了面向对象的思维!一、 核心概念:Matplotlib 的“画板”理论
很多新手会被 Matplotlib 的术语搞晕,其实你只需要把它想象成在画板上画画:核心组件 | 通俗比喻 | 官方定义 |
|---|
Figure | 整个画板/相框 | 整个图表的容器,可以包含一个或多个子图。 |
Axes | 画纸/绘图区 | 真正画画的区域(包含坐标系、线条等)。注意:不是Axis的复数! |
Axis | 画纸上的刻度尺 | X轴、Y轴,负责控制数据范围、刻度和标签。 |
Artist | 画布上的一切 | 所有可见的元素(线条、文本、图例、甚至整个Figure)都是Artist。 |
二、 两大绘图流派:Pyplot vs 面向对象
Matplotlib 提供了两种绘图方式。结合你的 OOP 基础,理解起来会非常轻松:1. 状态机流派(Pyplot)—— 适合快速画图
类似于 MATLAB 的语法,Matplotlib 会在后台维护一个“当前状态”,你调用 plt.xxx() 就是在修改当前图表。import matplotlibmatplotlib.use('TkAgg') # 防止某些IDE中图表一闪而过import matplotlib.pyplot as pltplt.plot([1, 2, 3], [4, 5, 6]) # 隐式创建 Figure 和 Axesplt.title("快速绘图")plt.show()
2. 面向对象流派(OOP)—— 适合复杂/出版级图表
显式创建 Figure 和 Axes 对象,然后通过调用对象的方法来绘图。
# 1. 实例化对象fig, ax = plt.subplots() # 2. 调用对象方法ax.plot([1, 2, 3], [4, 5, 6], color='blue', linestyle='--')ax.set_title("OOP 绘图方式")ax.set_xlabel("X轴")# 3. 展示plt.show()
三、 实战演练:绘制一张完美的折线图
我们将文档中的知识点串联起来,完成一个包含数据、样式、修饰、保存的完整流程。
import matplotlibmatplotlib.use('TkAgg')import matplotlib.pyplot as pltimport numpy as np# 💡 【丰富补充】解决中文显示乱码的终极配置(新手必坑!)plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS'] # Windows用SimHei,Mac用Arial Unicode MSplt.rcParams['axes.unicode_minus'] = False # 正常显示负号# 1. 准备数据x = np.linspace(0, 10, 100)y1 = np.sin(x)y2 = np.cos(x)# 2. 创建画布 (设置分辨率为 100,大小为 8x6 英寸)fig, ax = plt.subplots(figsize=(8, 6), dpi=100)# 3. 绘制图形 (控制颜色、线型、线宽、标签)ax.plot(x, y1, color='#FF5733', linestyle='-', linewidth=2, label='正弦波 sin(x)')ax.plot(x, y2, color='blue', linestyle='--', linewidth=1.5, label='余弦波 cos(x)')# 4. 图表修饰 (标题、坐标轴标签、图例、网格)ax.set_title('三角函数波形图', fontsize=16, fontweight='bold')ax.set_xlabel('时间 (s)', fontsize=12)ax.set_ylabel('振幅', fontsize=12)ax.legend(loc='upper right', fontsize=10) # 图例位置ax.grid(True, linestyle=':', alpha=0.7) # 添加半透明网格线# 5. 控制坐标轴范围ax.set_xlim(0, 10)ax.set_ylim(-1.5, 1.5)# 6. 保存与显示# 💡 【丰富补充】bbox_inches='tight' 可以裁掉多余的白边,dpi=300 保证高清plt.savefig('trig_functions.png', dpi=300, bbox_inches='tight') plt.show()
四、 Pyplot 常用 API 速查表
如果你使用 plt.xxx 的方式,以下函数必须烂熟于心:
函数 | 功能描述 | 常用参数示例 |
|---|
plt.figure()
| 创建新画布 | figsize=(10,5), dpi=100
|
plt.plot()
| 画折线/散点 | x, y, marker='o', color='r'
|
plt.scatter()
| 画散点图 | x, y, s=50, c='red', alpha=0.5
|
plt.bar()
| 画柱状图 | x, height, width=0.5, color='b'
|
plt.title()
| 设置标题 | fontsize=14, loc='left'
|
plt.xlabel()
| 设置X轴标签 | labelpad=10 (距离轴的距离)
|
plt.xticks()
| 设置X轴刻度 | ticks=[0,1,2], labels=['A','B','C']
|
plt.legend()
| 显示图例 | loc='best', frameon=False
|
plt.savefig()
| 保存图片 | fname='test.png', transparent=True
|
五、 新手避坑与进阶指南
1. 为什么我的图表一闪而过?
在 PyCharm 或 VSCode 等 IDE 中运行脚本时,如果没有 plt.show(),窗口会瞬间关闭。
解决:加上 plt.show(),或者在代码开头加上 matplotlib.use('TkAgg') 指定后端。
2. 在 Jupyter Notebook 中怎么用?
如果你用 Jupyter,不需要写 plt.show() 和 use('TkAgg'),只需要在代码最开头加上这句魔法命令,图表就会直接嵌入在代码下方:
3. 如何画出好看的图?
Matplotlib 内置了很多漂亮的主题,不用自己调颜色,一行代码搞定:# 查看可用主题print(plt.style.available)# 使用主题 (比如 ggplot, seaborn-v0_8-darkgrid, fivethirtyeight)plt.style.use('seaborn-v0_8-darkgrid')
4. 常用线条标记(Marker)速记
除了线条,你还可以在数据点上做标记:
'o' : 圆点's' : 正方形 (Square)'^' : 三角形'*' : 星号- 用法:
plt.plot(x, y, marker='o', markersize=8)
【一起学Python】每天进步一点点,365天后遇见更优秀的自己!
👉 关注公众号,不错过每天的进阶内容!
🎯 今日金句: "The goal is to turn data into information, and information into insight." (目标是将数据转化为信息,将信息转化为洞察。) —— Carly Fiorina