📜  绘图之间的 python 子图空间 - Python (1)

📅  最后修改于: 2023-12-03 15:11:38.962000             🧑  作者: Mango

绘图之间的 Python 子图空间 - Python

在 Python 中绘图,经常需要将几个图形绘制在一个大图里。这些小图被称为子图。Python 中有几种方法来控制子图空间。

使用 plt.subplots()

plt.subplots() 是最常用的创建子图的方法。它将返回一个包含画布和 ax(轴)数组的元组。

import matplotlib.pyplot as plt
import numpy as np

# 创建一个 2x2 的子图
fig, ax = plt.subplots(2, 2)

# 绘制第一个子图
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
ax[0, 0].plot(x, y)

# 绘制第二个子图
y = np.cos(x)
ax[0, 1].plot(x, y)

# 绘制第三个子图
y = np.tan(x)
ax[1, 0].plot(x, y)

# 绘制第四个子图
y = np.sinh(x)
ax[1, 1].plot(x, y)

# 显示图形
plt.show()

该代码将创建一个 2x2 的子图。每个子图的 ax 可以通过索引访问,如 ax[0, 0]

使用 plt.subplot()

如果您只需要创建一个子图,则可以使用 plt.subplot()。它采用三个参数:行,列和子图编号。

import matplotlib.pyplot as plt
import numpy as np

# 创建一个子图
plt.subplot(2, 2, 1)

# 绘制图形
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
plt.plot(x, y)

# 显示图形
plt.show()

该代码将创建一个 2x2 的子图,并在第一个位置绘制正弦图形。

调整子图间距

有时您需要在子图之间添加间隔。您可以使用 fig.tight_layout() 来自动调整子图间距。

import matplotlib.pyplot as plt
import numpy as np

# 创建一个 2x2 的子图
fig, ax = plt.subplots(2, 2)

# 绘制第一个子图
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
ax[0, 0].plot(x, y)

# 绘制第二个子图
y = np.cos(x)
ax[0, 1].plot(x, y)

# 绘制第三个子图
y = np.tan(x)
ax[1, 0].plot(x, y)

# 绘制第四个子图
y = np.sinh(x)
ax[1, 1].plot(x, y)

# 调整子图间距
fig.tight_layout()

# 显示图形
plt.show()

该代码将绘制一个 2x2 的子图并使用 fig.tight_layout() 调整子图之间的间距。

自定义子图布局

如果您需要更高级的子图空间控制,则可以使用 gridspec。您可以指定子图的大小和位置。

import matplotlib.gridspec as gridspec

# 创建一个 GridSpec 对象并指定子图的大小和位置
gs = gridspec.GridSpec(2, 2, width_ratios=[1, 2], height_ratios=[2, 1])
ax1 = plt.subplot(gs[0])
ax2 = plt.subplot(gs[1])
ax3 = plt.subplot(gs[2])
ax4 = plt.subplot(gs[3])

# 绘制图形
x = np.linspace(0, 2 * np.pi, 100)

ax1.plot(x, np.sin(x))
ax2.plot(x, np.cos(x))
ax3.plot(x, np.tan(x))
ax4.plot(x, np.sinh(x))

# 显示图形
plt.show()

该代码将创建一个包含 2x2 子图的 GridSpec 对象。您可以使用 width_ratiosheight_ratios 参数指定子图的大小和位置。

结论

Python 中有几种方法可以控制子图空间。最常用的方法是使用 plt.subplots()plt.subplot()。您可以使用 fig.tight_layout() 来自动调整子图之间的间距。如果要更高级的控制,请使用 gridspec