📅  最后修改于: 2023-12-03 15:11:38.962000             🧑  作者: Mango
在 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_ratios
和 height_ratios
参数指定子图的大小和位置。
Python 中有几种方法可以控制子图空间。最常用的方法是使用 plt.subplots()
和 plt.subplot()
。您可以使用 fig.tight_layout()
来自动调整子图之间的间距。如果要更高级的控制,请使用 gridspec
。