内容目录
多图布局¶
使用plt.tight_layout()解决重叠问题¶
In [9]:
import matplotlib.pyplot as plt
import numpy as np
# 创建数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = x**2
y4 = np.sqrt(x)
# 创建画布和子图,设置多图布局为2x2
fig, axs = plt.subplots(2, 2, figsize=(12, 8))
# 第一个子图
axs[0, 0].plot(x, y1)
axs[0, 0].set_xlabel('X1')
axs[0, 0].set_ylabel('Y1')
axs[0, 0].set_title('Sine Function')
# 第二个子图
axs[0, 1].plot(x, y2)
axs[0, 1].set_xlabel('X2')
axs[0, 1].set_ylabel('Y2')
axs[0, 1].set_title('Cosine Function')
# 第三个子图
axs[1, 0].plot(x, y3)
axs[1, 0].set_xlabel('X3')
axs[1, 0].set_ylabel('Y3')
axs[1, 0].set_title('Square Function')
# 第四个子图
axs[1, 1].plot(x, y4)
axs[1, 1].set_xlabel('X4')
axs[1, 1].set_ylabel('Y4')
axs[1, 1].set_title('Square Root Function')
plt.tight_layout() # 该函数用来对多图进行布局调整以避免重叠
plt.show()
使用fig.subplots_adjuest()解决重叠问题¶
In [10]:
import matplotlib.pyplot as plt
import numpy as np
# 创建数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = x**2
y4 = np.sqrt(x)
# 创建画布和子图,设置多图布局为2x2
fig, axs = plt.subplots(2, 2, figsize=(12, 8))
# 第一个子图
axs[0, 0].plot(x, y1)
axs[0, 0].set_xlabel('X1')
axs[0, 0].set_ylabel('Y1')
axs[0, 0].set_title('Sine Function')
# 第二个子图
axs[0, 1].plot(x, y2)
axs[0, 1].set_xlabel('X2')
axs[0, 1].set_ylabel('Y2')
axs[0, 1].set_title('Cosine Function')
# 第三个子图
axs[1, 0].plot(x, y3)
axs[1, 0].set_xlabel('X3')
axs[1, 0].set_ylabel('Y3')
axs[1, 0].set_title('Square Function')
# 第四个子图
axs[1, 1].plot(x, y4)
axs[1, 1].set_xlabel('X4')
axs[1, 1].set_ylabel('Y4')
axs[1, 1].set_title('Square Root Function')
# 调整子图之间的间距
fig.subplots_adjust(wspace=0.3, hspace=0.3)
plt.show()
自定义布局¶
使用GridSpec重新布局¶
In [19]:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.gridspec import GridSpec
# 创建数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.random.randint(1, 10, size=10)
# 创建画布和子图,设置自定义布局
fig = plt.figure(figsize=(12, 8))
gs = GridSpec(2, 2, height_ratios=[1, 2])
# 添加第一个子图(折线图)
ax1 = fig.add_subplot(gs[0, :])
ax1.plot(x, y1, color='blue')
ax1.set_title('Sine Function')
ax1.legend(['Sine'], loc='upper left')
# 添加第二个子图(折线图)
ax2 = fig.add_subplot(gs[1, :])
ax2.plot(x, y2, color='red')
ax2.set_title('Cosine Function')
ax2.legend(['Cosine'], loc='lower left')
# 添加第三个子图(柱状图)
ax3 = fig.add_subplot(gs[:, 1])
ax3.bar(np.arange(len(y3)), y3, color='green')
ax3.set_title('Bar Chart')
ax3.legend(['Bar'], loc='upper right')
plt.show()
使用GridSpec实现的示例中,我们创建了一个2×2的网格布局,通过调整每个子图在网格中的位置,实现了Sine和Cosine图例上下显示,Bar图例与Sine、Cosine图例左右显示,并且高度相同。运行这段代码,即可看到重新布局后的效果。
In [ ]: