我们可以使用 pyplot 中的 subplot() 和 subplots() 方法来绘制多个子图。
subplot() 方法在绘图时需要指定位置,subplots() 方法可以一次生成多个,在调用时只需要调用生成对象的 ax 即可。
subplot
subplot(nrows, ncols, index, **kwargs)
subplot(pos, **kwargs)
subplot(**kwargs)
subplot(ax)
以上函数将整个绘图区域分成 nrows 行和 ncols 列,然后从左到右,从上到下的顺序对每个子区域进行编号 1…N ,左上的子区域的编号为 1、右下的区域编号为 N,编号可以通过参数 index 来设置。
设置 numRows = 1,numCols = 2,就是将图表绘制成 1×2 的图片区域, 对应的坐标为:(1,1)(2,2)。
plotNum = 1, 表示的坐标为(1, 1), 即第一行第一列的子图。
plotNum = 2, 表示的坐标为(1, 2), 即第一行第二列的子图。
设置 numRows = 2,numCols = 2,就是将图表绘制成 2×2 的图片区域, 对应的坐标为:
(1, 1), (1, 2)
(2, 1), (2, 2)
plotNum = 1, 表示的坐标为(1, 1), 即第一行第一列的子图。
plotNum = 2, 表示的坐标为(1, 2), 即第一行第二列的子图。
plotNum = 3, 表示的坐标为(2, 1), 即第二行第一列的子图。
plotNum = 4, 表示的坐标为(2, 2), 即第二行第二列的子图。
subplots()
matplotlib.pyplot.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
- nrows:默认为 1,设置图表的行数。
- ncols:默认为 1,设置图表的列数。
- sharex、sharey:设置 x、y 轴是否共享属性,默认为 false,可设置为 ‘none’、’all’、’row’ 或 ‘col’。 False 或 none 每个子图的 x 轴或 y 轴都是独立的,True 或 ‘all’:所有子图共享 x 轴或 y 轴,’row’ 设置每个子图行共享一个 x 轴或 y 轴,’col’:设置每个子图列共享一个 x 轴或 y 轴。
- squeeze:布尔值,默认为 True,表示额外的维度从返回的 Axes(轴)对象中挤出,对于 N*1 或 1*N 个子图,返回一个 1 维数组,对于 N*M,N>1 和 M>1 返回一个 2 维数组。如果设置为 False,则不进行挤压操作,返回一个元素为 Axes 实例的2维数组,即使它最终是1×1。
- subplot_kw:可选,字典类型。把字典的关键字传递给 add_subplot() 来创建每个子图。
- gridspec_kw:可选,字典类型。把字典的关键字传递给 GridSpec 构造函数创建子图放在网格里(grid)。
- **fig_kw:把详细的关键字参数传给 figure() 函数。
subplot
和 subplots
是用于在 Matplotlib 中创建子图的两种不同方法。
subplot
是一个函数,它允许您使用单个命令来创建和定位子图。您可以指定图形的行数、列数和子图编号,然后在特定的子图中绘制数据。
import matplotlib.pyplot as plt plt.subplot(2, 1, 1) # 创建2行1列的子图并选择第一个子图 plt.plot([1, 2, 3, 4], [1, 4, 2, 3]) # 在第一个子图中绘制数据 plt.subplot(2, 1, 2) # 选择第二个子图 plt.plot([1, 2, 3, 4], [4, 3, 2, 1]) # 在第二个子图中绘制数据
subplots
是一个函数,它更适合用于创建整个图中的多个子图网格。它返回一个包含所有子图的 Figure 对象和坐标轴对象数组。
import matplotlib.pyplot as plt fig, axs = plt.subplots(2, 2) # 创建一个2x2的子图网格 axs[0, 0].plot([1, 2, 3, 4], [1, 4, 2, 3]) # 在第一行第一列子图中绘制数据 axs[0, 1].plot([1, 2, 3, 4], [4, 3, 2, 1]) # 在第一行第二列子图中绘制数据 axs[1, 0].plot([1, 2, 3, 4], [1, 2, 3, 4]) # 在第二行第一列子图中绘制数据 axs[1, 1].plot([1, 2, 3, 4], [4, 2, 3, 1]) # 在第二行第二列子图中绘制数据
最新评论