### Matplotlib 中 `plt.subplots` 的使用方法
`plt.subplots` 是 Matplotlib 提供的一个便捷函数,用于创建包含单个或多个子图的画布。通过该函数可以轻松定义网格布局中的子图数量及其属性。
#### 基本语法
以下是 `plt.subplots` 的基本语法:
```python
fig, axs = plt.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 轴[^1]。
- `squeeze`: 控制返回的对象形状。如果为 True,则当只有一行一列时会简化返回对象;否则始终返回二维数组形式[^2]。
- `subplot_kw`: 字典参数,传递给每个子图实例化时使用的额外关键字参数。
- `gridspec_kw`: 字典参数,控制整个网格布局的行为。
#### 示例代码
以下是一个完整的示例,展示如何使用 `constrained_layout` 和自定义大小来创建多子图:
```python
import matplotlib.pyplot as plt
# 定义一个具有两行两列的子图,并启用自动布局调整功能
fig, axs = plt.subplots(2, 2, figsize=(8, 6), constrained_layout=True)
# 绘制不同数据到各个子图上
axs[0, 0].plot([0, 1, 2], [0, 1, 4])
axs[0, 0].set_title('Plot 1')
axs[0, 1].plot([0, 1, 2], [0, 1, 2], 'g--')
axs[0, 1].set_title('Plot 2')
axs[1, 0].plot([0, 1, 2], [0, 1, 3], 'b-.')
axs[1, 0].set_title('Plot 3')
axs[1, 1].scatter([0, 1, 2], [0, 1, 5], color='red', marker='o')
axs[1, 1].set_title('Scatter Plot')
# 显示图像
plt.show()
```
上述代码中设置了 `figsize` 来指定整体图形的高度和宽度 (单位为英寸),并通过 `constrained_layout=True` 避免标签重叠问题。
#### 自定义高度和宽度
可以通过 `figsize` 参数来自定义生成图表的整体尺寸。例如,在下面的例子中,我们创建了一个较大的绘图区域并绘制单一曲线:
```python
fig, ax = plt.subplots(figsize=(10, 5)) # 图形宽10高5
ax.plot([0, 1, 2, 3, 4], [0, 1, 4, 9, 16], label="Quadratic", linewidth=2.5)
ax.set_xlabel("X-axis Label") # X轴标注
ax.set_ylabel("Y-axis Label") # Y轴标注
ax.legend() # 添加图例
plt.show()
```
此部分展示了如何单独配置某个特定子图以及全局样式设置[^3]。
---
###