本章将带领你在10分钟内掌握 Matplotlib 的核心用法。我们从一个最简单的图表开始, 逐步了解如何绘制不同类型的图表、如何创建子图以及如何保存你的作品。
按照惯例,我们导入 pyplot 并简写为 plt。如果用到数值计算,也会导入 NumPy。
import matplotlib.pyplot as plt
import numpy as np
# 数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y) # 绘制折线
plt.title('简单折线图') # 添加标题
plt.xlabel('X轴') # X轴标签
plt.ylabel('Y轴') # Y轴标签
plt.show() # 显示图表
Matplotlib 的核心对象是 Figure (画布) 和 Axes (坐标系)。上面的 plt.plot() 实际上是隐式创建了 Figure 和 Axes。更灵活的方式是显式创建:
fig, ax = plt.subplots() # 创建一个画布和一个坐标系
ax.plot(x, y) # 在坐标系上绘图
ax.set_title('显式创建 Figure 和 Axes')
plt.show()
这种面向对象的方式在绘制复杂图表或子图时非常有用。
# 生成随机数据
x = np.random.randn(50)
y = np.random.randn(50)
colors = np.random.rand(50)
sizes = 500 * np.random.rand(50)
plt.scatter(x, y, c=colors, s=sizes, alpha=0.5)
plt.colorbar() # 显示颜色条
plt.title('散点图示例')
plt.show()
categories = ['A', 'B', 'C', 'D']
values = [15, 8, 12, 10]
plt.bar(categories, values, color='skyblue', edgecolor='navy')
plt.title('柱状图示例')
plt.ylabel('数量')
plt.show()
data = np.random.randn(1000) # 生成1000个正态分布随机数
plt.hist(data, bins=30, edgecolor='black', alpha=0.7)
plt.title('直方图示例')
plt.xlabel('数值')
plt.ylabel('频数')
plt.show()
使用 plt.subplots() 可以创建多个子图:
fig, axes = plt.subplots(2, 2, figsize=(10, 8)) # 2行2列
# 左上
axes[0, 0].plot([1,2,3], [1,4,9])
axes[0, 0].set_title('折线图')
# 右上
axes[0, 1].scatter(np.random.randn(50), np.random.randn(50))
axes[0, 1].set_title('散点图')
# 左下
axes[1, 0].bar(['A','B','C'], [5,7,3])
axes[1, 0].set_title('柱状图')
# 右下
axes[1, 1].hist(np.random.randn(500), bins=20)
axes[1, 1].set_title('直方图')
plt.tight_layout() # 自动调整间距
plt.show()
plt.tight_layout() 可以防止子图标签重叠。
使用 savefig() 代替 show() 即可将图表保存为文件:
plt.plot(x, y)
plt.title('待保存的图表')
plt.savefig('my_plot.png', dpi=300, bbox_inches='tight') # 保存为PNG,高分辨率,紧凑边框
# 也可以保存为 PDF / SVG:plt.savefig('my_plot.pdf')
在 Notebook 中,通常使用魔法命令 %matplotlib inline 使图表直接显示在单元格下方。还可以使用 %matplotlib notebook 获得交互式图表。
%matplotlib inline
import matplotlib.pyplot as plt
plt.plot([1,2,3], [4,5,6])
Matplotlib 内置多种样式,一行代码即可改变整体外观:
print(plt.style.available) # 查看所有可用样式
plt.style.use('seaborn-v0_8-darkgrid') # 应用深色网格样式
# 之后的图表都会使用该样式
plt.plot([1,2,3], [1,2,3])
plt.title('应用样式后的图表')
plt.show()
至此,你已经掌握了 Matplotlib 最常用的功能。接下来可以深入学习如何定制图表的颜色、线型、标记等细节。