一、基本概念
add_subplot()是matplotlib库中的一个方法,用于创建一个指定大小的子图,并将其添加到指定位置的figure中。它可以快速地为我们创建不同布局的子图。在使用add_subplot()时,需要指定三个参数:行数,列数,子图编号。其中,行数和列数指定了图像排列的方式,子图编号指定了将要创建的子图在figure中的位置。
二、使用方法
1. 仅创建子图
import matplotlib.pyplot as plt
fig = plt.figure() # 创建一个空白的figure
ax = fig.add_subplot(1, 1, 1) # 创建一个大小为1*1的子图
plt.show() # 展示图像
上述代码中,我们首先创建了一个空白的figure,然后使用add_subplot()方法创建了一个大小为1*1的子图,并将其存储在变量ax中。最后,我们调用plt.show()展示这个子图。
2. 创建多个子图
import matplotlib.pyplot as plt
fig = plt.figure() # 创建一个空白的figure
ax1 = fig.add_subplot(2, 2, 1) # 创建第一个子图,位置为(0,0)
ax2 = fig.add_subplot(2, 2, 2) # 创建第二个子图,位置为(0,1)
ax3 = fig.add_subplot(2, 2, 3) # 创建第三个子图,位置为(1,0)
ax4 = fig.add_subplot(2, 2, 4) # 创建第四个子图,位置为(1,1)
plt.show() # 展示图像
上述代码中,我们创建了一个大小为2*2的figure,并在其中创建了4个子图。通过指定子图的编号和位置,我们可以很容易地控制子图的排列方式。
3. 设置子图共享轴
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(2, 1, 1)
ax2 = fig.add_subplot(2, 1, 2, sharex=ax1) # 将ax2的x轴与ax1共享
x = np.linspace(0, 2 * np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)
ax1.plot(x, y1)
ax2.plot(x, y2)
plt.show()
上述代码中,我们创建了2个子图,并设置第二个子图(ax2)共享第一个子图(ax1)的x轴。这样可以使子图在某些方面呈现统一性,提升图像的观感。
4. 添加图例和标题
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
x = np.linspace(0, 2 * np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)
ax.plot(x, y1, 'r', label='sin(x)')
ax.plot(x, y2, 'b', label='cos(x)')
ax.legend() # 显示图例
ax.set_title('A simple plot') # 添加标题
plt.show()
上述代码中,我们创建了一个子图,并在其上绘制了两个线条,并为它们设置了标签。然后,我们调用ax.legend()方法显示图例,并使用ax.set_title()方法为子图添加了标题。
5. 使用ax.plot()绘制多种图形
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
x = np.linspace(0, 2 * np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)
ax.plot(x, y1, 'ro') # 绘制红色点
ax.plot(x, y2, 'b--') # 绘制蓝色虚线
plt.show()
上述代码中,我们使用ax.plot()方法分别绘制了红色点和蓝色虚线。其中,'ro'和'b--'分别指定了线条的颜色和类型。
三、总结
add_subplot()是matplotlib库中的一个方法,用于快速创建不同布局的子图。通过指定行数、列数和子图编号,我们可以很容易地控制子图在figure中的位置和排列方式。除此之外,我们还可以使用ax.plot()方法在子图上绘制各种图形,并通过调用ax.legend()和ax.set_title()等方法为子图添加图例和标题,提升图像的可读性和美观度。