📅  最后修改于: 2023-12-03 15:07:35.392000             🧑  作者: Mango
在数据可视化时,经常需要将多个图像放在同一画布的不同位置上,此时就需要使用 subplot。subplot 是 matplotlib 库的一个很常用的工具,它可以让用户在同一画布中绘制多个子图。
使用 subplot 函数,需要传入三个参数:行数、列数和子图编号。代码如下:
import matplotlib.pyplot as plt
plt.subplot(1, 2, 1) # 第一行第一个子图
plt.plot([1, 2, 3], [4, 5, 6], 'ro')
plt.subplot(1, 2, 2) # 第一行第二个子图
plt.plot([1, 2, 3], [4, 5, 6], 'b*')
plt.show()
上述代码中,plt.subplot(1, 2, 1) 表示将子图分成 1 行 2 列,当前绘制第一个子图,即第一行第一个位置。
plt.subplot(1, 2, 2) 表示将子图分成 1 行 2 列,当前绘制第二个子图,即第一行第二个位置。
输出的图像如下所示:
我们可以使用 subplot 的方法,来调整每个子图的位置。同样是传入行数、列数和子图编号,只不过这里的子图编号是各位置中的编号。代码如下:
import matplotlib.pyplot as plt
plt.subplot(2, 1, 1) # 第一行第一个位置
plt.text(0.5, 0.5, 'Subplot 1', ha='center', va='center', fontsize=20, color='b')
plt.subplot(2, 3, 4) # 第二行第一个位置
plt.text(0.5, 0.5, 'Subplot 2', ha='center', va='center', fontsize=20, color='r')
plt.subplot(2, 3, 5) # 第二行第二个位置
plt.text(0.5, 0.5, 'Subplot 3', ha='center', va='center', fontsize=20, color='g')
plt.subplot(2, 3, 6) # 第二行第三个位置
plt.text(0.5, 0.5, 'Subplot 4', ha='center', va='center', fontsize=20, color='y')
plt.subplots_adjust(wspace=0.4, hspace=0.4)
plt.show()
上述代码中,我们首先绘制了 2 行 1 列的图像,并在第一行第一个位置绘制了文本 "Subplot 1"。接下来,我们分别在第二行第一个位置、第二行第二个位置和第二行第三个位置绘制了文本 "Subplot 2"、"Subplot 3"、"Subplot 4"。
同时,我们使用了 plt.subplots_adjust() 函数,来调整子图之间的水平和垂直间距。输出的图像如下所示:
当需要在同一画布中绘制多个图像时,我们可以使用多个 subplot 将它们放在相应位置上。此时,每个 subplot 的参数需要分别设置。代码如下:
import numpy as np
import matplotlib.pyplot as plt
# 绘制 Cos 和 Sin
x = np.linspace(0, 2*np.pi, 500)
fig = plt.figure()
ax1 = fig.add_subplot(2, 2, 1) # 第一行第一个位置
ax1.plot(x, np.cos(x), color='r')
ax1.set_title('Cos')
ax2 = fig.add_subplot(2, 2, 2) # 第一行第二个位置
ax2.plot(x, np.sin(x), color='b')
ax2.set_title('Sin')
# 绘制正弦函数的一次和二次导数
ax3 = fig.add_subplot(2, 2, 3) # 第二行第一个位置
df = np.gradient(np.sin(x)) # 一次导数
d2f = np.gradient(np.gradient(np.sin(x))) # 二次导数
l1, = ax3.plot(x, np.sin(x), color='y')
l2, = ax3.plot(x, df, color='g')
l3, = ax3.plot(x, d2f, color='r')
ax3.set_title('Sin, Sin\', Sin\'\'')
# 创建图例并调整位置
plt.legend(handles=[l1, l2, l3], labels=['Sin', 'Sin\'', 'Sin\'\''], loc='upper right')
plt.subplots_adjust(wspace=0.3, hspace=0.3)
plt.show()
上述代码中,我们绘制了两个图像:Cos 和 Sin,分别在第一行的两个位置上;并在第二行的第一个位置上,绘制了正弦函数的一次和二次导数。
图例使用的是 plt.legend() 函数,并使用 handles、labels、loc 参数分别指定了图例中显示的内容以及显示的位置。
输出的图像如下所示:
subplot 是 matplotlib 库中一个非常有用的工具,它可以帮助我们在同一画布中绘制多个子图。本篇文章带领大家了解了 subplot 的基本用法、位置调整、多个图像的绘制等。读者在实际应用中可以灵活运用 subplot,方便快捷地绘制多个子图。