Matplotlib 中 plt.subplots() 和 plt.figure() 的区别
Matplotlib 是一个用于绘制各种图表的 Python 库,它具有灵活性和易于使用的特点。在 Matplotlib 中,plt.subplots() 和 plt.figure() 是两个非常重要的函数。它们都能够创建一个 Figure 对象,但它们之间也有一些区别。本文将讨论这两个函数的区别和如何使用它们进行图像的绘制。
什么是 plt.subplots() 和 plt.figure()
在开始讨论两者之间的区别之前,先了解一下它们各自的作用。
plt.subplots()
plt.subplots()
是一个创建 subplot 画布的函数。其允许你创建一个或多个 subplot,每个 subplot 位于独立的坐标轴上。下面是 plt.subplots()
的一个简单示例:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4], [1, 4, 2, 3])
在上面的代码中,我们建立了一个 fig, ax = plt.subplots()
的对象,然后将 x 值作为第一个参数,将 y 值作为第二个参数传递给 ax.plot()
函数。这里的 ax
表示我们要绘制的坐标轴。
plt.subplots()
还支持多个 subplot 的创建,下面是一个带有两个 subplot 的示例:
fig, (ax1, ax2) = plt.subplots(1, 2)
在这个例子中,我们一次性创建了一个有两个子图的画布。第一个参数 1
指定了画布应该有多少行,而第二个参数 2
则指定了画布应该有多少列。在这个例子中,我们在 fig, (ax1, ax2)
中创建了两个 subplot,其中 ax1
将位于第一列并占据整个行,而 ax2
将位于第二列并占据整个行。
plt.figure()
与 plt.subplots()
不同,plt.figure()
函数是创建独立图形的函数。下面是 plt.figure()
的一个示例:
fig = plt.figure()
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
在上面的代码中,我们创建了一个名为 fig
的新图形,并使用 plt.plot()
函数将 x 值作为第一个参数,将 y 值作为第二个参数传递给该函数。与 plt.subplots()
不同,plt.figure()
的返回结果是单一的,因为它返回的只是一个图形对象。
plt.subplots() 和 plt.figure() 的区别
我们现在已经了解了 plt.subplots()
和 plt.figure()
各自的用途,接下来我们将讨论这两个函数之间的区别。
最明显的区别在于,plt.subplots()
可以同时绘制多幅子图,而 plt.figure()
只能绘制一幅图。此外,plt.subplots()
还可以返回绘图的 axes 对象,使得你能够直接或间接地通过对象来修改子图(标题、x 轴和 y 轴标签等),而 plt.figure()
不会返回这些对象。
另一个区别是 plt.subplots()
的语法比 plt.figure()
比较灵活。我们可以使用以下语法来调用 plt.subplots()
函数:
fig, ax = plt.subplots(nrows=2, ncols=2)
这里,nrows
指定子图行的数量,而 ncols
则指定列的数量。如果不指定行数和列数,plt.subplots()
会创建一个子图。另外,这个函数还有一个 sharex
和 sharey
参数,它们用于控制子图的共享 x 轴和共享 y 轴。
另外,plt.subplots()
还支持 squeeze
参数,它控制是否压缩返回的对象。如果 squeeze=True
,则在仅有一行或一列时,它将返回一个整数数组(如图形中的一个单独子图),而不是一个数组的列表。
使用示例
为了更好地理解 plt.subplots()
和 plt.figure()
之间的差异,下面分别给出了 plt.subplots()
和 plt.figure()
的绘图示例。
plt.subplots() 示例
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-np.pi, np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)
fig, axs = plt.subplots(2, 1, figsize=(6, 6))
axs[0].plot(x, y1)
axs[0].set_title('sin(x)')
axs[0].set_xlabel('x')
axs[0].set_ylabel('y')
axs[1].plot(x, y2)
axs[1].set_title('cos(x)')
axs[1].set_xlabel('x')
axs[1].set_ylabel('y')
plt.show()
在上面的代码中,我们使用 plt.subplots()
创建了一个画布,并在该画布中创建了两个子图。这里的 fig, axs
对象分别代表画布和子图坐标轴对象。我们使用 axs[0]
和 axs[1]
对象向子图中添加了两条曲线,并设置了相应的标题、x 轴和 y 轴标签。最后,我们使用 plt.show()
函数展示出我们的绘图结果。
plt.figure() 示例
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-np.pi, np.pi, 100)
y = np.sin(x)
fig = plt.figure(figsize=(6, 4.5))
plt.plot(x, y)
plt.title('Sin(x) Curve')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
在上面的代码中,我们使用 plt.figure()
函数创建了一个画布对象 fig
,并使用 plt.plot()
函数向该画布中添加了一条曲线。接着,我们使用 plt.title()
、plt.xlabel()
和 plt.ylabel()
函数设置了图形的标题和横纵坐标轴标签。最后,使用 plt.show()
展示出我们的绘图结果。
结论
在本文中,我们介绍了 Matplotlib 库中的 plt.subplots()
和 plt.figure()
函数,并讨论了它们之间的区别。简单来说,plt.subplots()
允许创建多个子图,而 plt.figure()
仅允许创建单个图表。另外,plt.subplots()
还返回用于访问子图的 Axes 对象,而 plt.figure()
不会返回这些对象。因此,在进行 Matplotlib 绘图时,我们需要根据具体的需求选择适当的函数。