matplotlib.pyplot.subplots
函数在创建多个子图时提供了许多参数,使得创建和调整子图变得非常灵活。以下是一些常用参数及其解释:
基本参数
- nrows: 子图网格的行数。
- ncols: 子图网格的列数。
- sharex: 所有子图是否共享 x 轴。如果设置为
True
,所有子图将共享相同的 x 轴刻度和标签。还可以设置为'row'
,表示同一行的子图共享 x 轴。 - sharey: 所有子图是否共享 y 轴。如果设置为
True
,所有子图将共享相同的 y 轴刻度和标签。还可以设置为'col'
,表示同一列的子图共享 y 轴。 - figsize: 图形的宽度和高度,以英寸为单位。可以传入一个元组
(width, height)
。 - dpi: 图形的分辨率(每英寸点数)。
- gridspec_kw: 传递给
GridSpec
构造函数的字典,用于设置网格的更多高级参数。 - subplot_kw: 传递给
add_subplot
函数的字典,用于设置每个子图的更多高级参数。 - constrained_layout: 是否使用受限布局引擎来自动调整子图参数以减少重叠。
返回值
subplots
函数返回两个对象:
- fig:
Figure
对象,表示整个图形。 - axs:
Axes
对象或数组,表示子图。如果nrows
和ncols
都是 1,则axs
是一个单一的Axes
对象,否则它是一个Axes
对象的 2D 数组。
示例
以下是一些使用 subplots
参数的示例:
创建一个 2×2 的子图网格
1 2 3 4 5 6 7 8 9 10 11 |
import matplotlib.pyplot as plt fig, axs = plt.subplots(nrows=2, ncols=2) for i in range(2): for j in range(2): axs[i, j].plot([1, 2, 3], [1, 4, 9]) axs[i, j].set_title(f'Subplot {i+1},{j+1}') plt.tight_layout() plt.show() |
共享 x 轴和 y 轴
1 2 3 4 5 6 7 8 9 |
fig, axs = plt.subplots(2, 2, sharex='col', sharey='row') for i in range(2): for j in range(2): axs[i, j].plot([1, 2, 3], [1, 4, 9]) axs[i, j].set_title(f'Subplot {i+1},{j+1}') plt.tight_layout() plt.show() |
设置图形大小和分辨率
1 2 3 4 5 6 7 8 9 |
fig, axs = plt.subplots(2, 2, figsize=(10, 8), dpi=100) for i in range(2): for j in range(2): axs[i, j].plot([1, 2, 3], [1, 4, 9]) axs[i, j].set_title(f'Subplot {i+1},{j+1}') plt.tight_layout() plt.show() |
使用高级网格参数
1 2 3 4 5 6 7 8 9 |
fig, axs = plt.subplots(2, 2, gridspec_kw={'width_ratios': [1, 2], 'height_ratios': [2, 1]}) for i in range(2): for j in range(2): axs[i, j].plot([1, 2, 3], [1, 4, 9]) axs[i, j].set_title(f'Subplot {i+1},{j+1}') plt.tight_layout() plt.show() |
使用受限布局引擎
1 2 3 4 5 6 7 8 |
fig, axs = plt.subplots(2, 2, constrained_layout=True) for i in range(2): for j in range(2): axs[i, j].plot([1, 2, 3], [1, 4, 9]) axs[i, j].set_title(f'Subplot {i+1},{j+1}') plt.show() |
总结
subplots
函数的参数提供了丰富的功能,允许你灵活地创建和调整子图。通过了解和利用这些参数,你可以创建出符合需求的复杂图形布局。
文档
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.subplots.html