返回

轻松玩转 matplotlib 画布分区:三种分而治之的强大方法

后端

matplotlib 是 Python 中用于创建各种类型图形的流行绘图库。它提供了广泛的功能和选项,使您可以轻松创建各种类型的图形,从简单的折线图到复杂的 3D 散点图。

在 matplotlib 中,画布分区是指将画布划分为多个子区域,每个子区域都可以容纳一个或多个图形。这对于创建包含多个图形的复杂图形非常有用。

matplotlib 中有三种主要的方法来对画布进行分区:

  1. plt.subplot() :plt.subplot() 是最简单的方法,它允许您将画布划分为一个或多个子图。您可以使用 plt.subplot() 指定子图的行数、列数和位置。

  2. plt.subplots() :plt.subplots() 是一个更高级的方法,它允许您创建具有更复杂布局的子图。您可以使用 plt.subplots() 指定子图的行数、列数、大小和位置。

  3. gridspec :gridspec 是一个更高级的库,它允许您创建具有更复杂布局的子图。gridspec 提供了更灵活的控制方式,您可以使用它来创建网格、子图和 Axes 对象。

在本教程中,我们将讨论这三种方法,并向您展示如何使用它们来创建各种类型的图形。

使用 plt.subplot()

plt.subplot() 是最简单的方法,它允许您将画布划分为一个或多个子图。您可以使用 plt.subplot() 指定子图的行数、列数和位置。

以下是如何使用 plt.subplot() 创建一个简单的子图的示例:

import matplotlib.pyplot as plt

# 创建一个画布
fig, ax = plt.subplots()

# 将画布划分为一个子图
ax.plot([1, 2, 3], [4, 5, 6])

# 显示图形
plt.show()

这将创建一个包含一个子图的画布。子图将占据整个画布。

您可以使用 plt.subplot() 来创建包含多个子图的画布。以下是如何使用 plt.subplot() 创建一个包含两个子图的画布的示例:

import matplotlib.pyplot as plt

# 创建一个画布
fig, ax = plt.subplots(2, 1)

# 将画布划分为两个子图
ax[0].plot([1, 2, 3], [4, 5, 6])
ax[1].plot([7, 8, 9], [10, 11, 12])

# 显示图形
plt.show()

这将创建一个包含两个子图的画布。第一个子图将占据画布的顶部一半,第二个子图将占据画布的底部一半。

使用 plt.subplots()

plt.subplots() 是一个更高级的方法,它允许您创建具有更复杂布局的子图。您可以使用 plt.subplots() 指定子图的行数、列数、大小和位置。

以下是如何使用 plt.subplots() 创建一个简单的子图的示例:

import matplotlib.pyplot as plt

# 创建一个画布
fig, ax = plt.subplots(figsize=(6, 4))

# 将画布划分为一个子图
ax.plot([1, 2, 3], [4, 5, 6])

# 显示图形
plt.show()

这将创建一个包含一个子图的画布。子图将占据整个画布。

您可以使用 plt.subplots() 来创建包含多个子图的画布。以下是如何使用 plt.subplots() 创建一个包含两个子图的画布的示例:

import matplotlib.pyplot as plt

# 创建一个画布
fig, ax = plt.subplots(2, 1, figsize=(6, 8))

# 将画布划分为两个子图
ax[0].plot([1, 2, 3], [4, 5, 6])
ax[1].plot([7, 8, 9], [10, 11, 12])

# 显示图形
plt.show()

这将创建一个包含两个子图的画布。第一个子图将占据画布的顶部一半,第二个子图将占据画布的底部一半。

使用 gridspec

gridspec 是一个更高级的库,它允许您创建具有更复杂布局的子图。gridspec 提供了更灵活的控制方式,您可以使用它来创建网格、子图和 Axes 对象。

以下是如何使用 gridspec 创建一个简单的子图的示例:

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

# 创建一个画布
fig = plt.figure()

# 创建一个网格
gs = gridspec.GridSpec(1, 1)

# 将网格划分为一个子图
ax = fig.add_subplot(gs[0, 0])

# 将画布划分为一个子图
ax.plot([1, 2, 3], [4, 5, 6])

# 显示图形
plt.show()

这将创建一个包含一个子图的画布。子图将占据整个画布。

您可以使用 gridspec 来创建包含多个子图的画布。以下是如何使用 gridspec 创建一个包含两个子图的画布的示例:

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

# 创建一个画布
fig = plt.figure()

# 创建一个网格
gs = gridspec.GridSpec(2, 1)

# 将网格划分为两个子图
ax0 = fig.add_subplot(gs[0, 0])
ax1 = fig.add_subplot(gs[1, 0])

# 将画布划分为两个子图
ax0.plot([1, 2, 3], [4, 5, 6])
ax1.plot([7, 8, 9], [10, 11, 12])

# 显示图形
plt.show()

这将创建一个包含两个子图的画布。第一个子图将占据画布的顶部一半,第二个子图将占据画布的底部一半。