Matplotlib 中 plt.subplots() 和 plt.figure() 的区别

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() 会创建一个子图。另外,这个函数还有一个 sharexsharey参数,它们用于控制子图的共享 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 绘图时,我们需要根据具体的需求选择适当的函数。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程