plt.subplot和plt.subpots绘制多个子图
大家好,我素洪小帅~
在同一张图中绘制多个子图,可以使用 Matplotlib 的 plt.subplot
或 plt.subplots
函数。两者都能帮助你在一个窗口中创建多个子图,区别在于它们的使用方式和灵活性。
1. 使用 plt.subplot
plt.subplot
用于创建一个包含多个子图的画布,并在每个子图中绘制图形。你需要指定行数、列数以及子图的位置。
语法:
plt.subplot(nrows, ncols, index)
nrows
:子图的行数。ncols
:子图的列数。index
:指定当前子图的位置,按照从左到右、从上到下的顺序编号(从 1 开始)。
示例:使用 plt.subplot
绘制 2x2 的子图
import matplotlib.pyplot as plt
import numpy as np
# 生成一些数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
y4 = np.exp(-x)
# 创建 2x2 子图
plt.subplot(2, 2, 1) # 第一行第一列
plt.plot(x, y1)
plt.title('Sine Wave')
plt.subplot(2, 2, 2) # 第一行第二列
plt.plot(x, y2)
plt.title('Cosine Wave')
plt.subplot(2, 2, 3) # 第二行第一列
plt.plot(x, y3)
plt.title('Tangent Wave')
plt.subplot(2, 2, 4) # 第二行第二列
plt.plot(x, y4)
plt.title('Exponential Decay')
# 显示图形
plt.tight_layout() # 自动调整子图之间的间距
plt.show()
2. 使用 plt.subplots
plt.subplots
是一种更灵活且简洁的方式来创建多个子图。它返回一个包含所有子图的 figure 对象和一个包含子图轴的数组,方便对各个子图进行更细致的控制。
语法:
fig, axes = plt.subplots(nrows, ncols)
nrows
:子图的行数。ncols
:子图的列数。- 返回值:
fig
:当前图形对象。axes
:一个包含多个子图轴的数组,可以通过索引来访问每个子图。
示例:使用 plt.subplots
绘制 2x2 的子图
import matplotlib.pyplot as plt
import numpy as np
# 生成一些数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
y4 = np.exp(-x)
# 创建 2x2 子图
fig, axes = plt.subplots(2, 2)
# 绘制数据
axes[0, 0].plot(x, y1)
axes[0, 0].set_title('Sine Wave')
axes[0, 1].plot(x, y2)
axes[0, 1].set_title('Cosine Wave')
axes[1, 0].plot(x, y3)
axes[1, 0].set_title('Tangent Wave')
axes[1, 1].plot(x, y4)
axes[1, 1].set_title('Exponential Decay')
# 自动调整子图之间的间距
plt.tight_layout()
# 显示图形
plt.show()
3. 小技巧:
- 使用
plt.tight_layout()
可以自动调整子图之间的间距,防止标签重叠。 - 在
plt.subplot
或plt.subplots
中,nrows
和ncols
可以自定义为任意大小的网格。 - 你可以通过
axes
数组对每个子图进行更多自定义,例如修改标题、标签、刻度等。
总结:
plt.subplot
适用于简单的子图布局,但会显得稍微繁琐。plt.subplots
更加灵活,适合创建多个子图并进行更精细的操作。
两者根据使用场景选择,plt.subplots
是现代 Matplotlib 推荐的方式。