
subplot 与 subplots 的区别
在Matplotlib库中,subplot和subplots是两个用于创建子图(subplots)的函数,但它们在使用方式和功能上有一些显著的区别。下面将详细解释这两个函数的不同之处。
1. subplot 函数
语法:plt.subplot(nrows, ncols, index) 或 plt.subplot(gridspec_object)
- nrows 和 ncols 分别表示行数和列数。
- index 表示当前子图的位置编号,从左到右、从上到下计数。
- gridspec_object 是一个GridSpec对象,允许更复杂的子图布局。
使用方式:subplot 是直接在当前的图形(figure)上创建一个新的子图区域。如果之前没有调用过 figure() 创建新图形,则会自动创建一个。
示例代码:
import matplotlib.pyplot as plt # 创建一个2行2列的子图布局,并激活第1个子图区域(左上角) plt.subplot(2, 2, 1) plt.plot([1, 2, 3], [1, 4, 9]) # 激活第2个子图区域(右上角) plt.subplot(2, 2, 2) plt.plot([1, 2, 3], [1, 0.5, 0.333]) plt.show()
2. subplots 函数
语法:fig, ax = plt.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
- nrows 和 ncols 分别表示行数和列数。
- sharex 和 sharey 表示是否共享x轴或y轴。
- squeeze 当为True时,如果只有一个子图,则返回的子图数组会被压缩成一个单独的Axes对象;否则返回一个包含单个元素的数组。
- subplot_kw 和 gridspec_kw 用于传递额外的参数给子图和GridSpec对象。
- **fig_kw 用于传递给Figure对象的额外关键字参数。
返回值:subplots 返回两个对象——一个 Figure 对象和一个 Axes 对象(或 AxesSubplot 对象的数组)。
使用方式:subplots 首先创建一个新的图形(figure),然后在这个图形上创建指定数量和布局的子图。返回的 Axes 对象可以直接用于绘图操作。
示例代码:
import matplotlib.pyplot as plt # 创建一个2行2列的子图布局 fig, axs = plt.subplots(2, 2) # 在第一个子图上绘制数据 axs[0, 0].plot([1, 2, 3], [1, 4, 9]) # 在第二个子图上绘制数据 axs[0, 1].plot([1, 2, 3], [1, 0.5, 0.333]) plt.show()
总结
- 灵活性:subplots 更加灵活,因为它允许你一次性创建多个子图,并且直接返回对应的 Axes 对象进行操作。而 subplot 需要逐个激活子图区域进行绘图。
- 管理图形:使用 subplots 可以更方便地管理和控制整个图形的布局和样式,因为你可以通过 Figure 对象来设置全局属性。
- 适用场景:如果你只需要在一个简单的布局中快速绘制几个子图,subplot 可能更快捷;但如果你需要更复杂的布局或需要对图形进行更多的自定义和控制,那么 subplots 会是更好的选择。
