📜  如何在 Matplotlib 中创建不同的子图大小?(1)

📅  最后修改于: 2023-12-03 14:52:26.709000             🧑  作者: Mango

如何在 Matplotlib 中创建不同的子图大小?

在 Matplotlib 中,我们可以使用 subplot() 函数来创建多个子图。但是,默认情况下,所有的子图大小都是相同的。如果我们想创建不同大小的子图,该怎么办呢?本文将介绍如何在 Matplotlib 中创建不同大小的子图。

简单的子图例子

首先我们来看一个简单的子图例子,由 2 行 2 列组成的 4 张子图:

import matplotlib.pyplot as plt

x = [1,2,3,4]
y1 = [4,3,2,1]
y2 = [1,2,3,4]
y3 = [2,4,1,3]
y4 = [3,1,4,2]

plt.subplot(2, 2, 1)
plt.plot(x, y1)

plt.subplot(2, 2, 2)
plt.plot(x, y2)

plt.subplot(2, 2, 3)
plt.plot(x, y3)

plt.subplot(2, 2, 4)
plt.plot(x, y4)

plt.show()

输出结果如下:

simple-subplot-example

可以看出,每个子图的大小都是相同的。

使用 gridspec 创建不同大小的子图

要在 Matplotlib 中创建不同大小的子图,我们需要使用 gridspec 模块。gridspec 模块提供了更多的灵活性来创建不同大小的子图。

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

x = [1,2,3,4]
y1 = [4,3,2,1]
y2 = [1,2,3,4]
y3 = [2,4,1,3]
y4 = [3,1,4,2]

gs = gridspec.GridSpec(2, 2, height_ratios=[1, 2], width_ratios=[2, 1])

ax1 = plt.subplot(gs[0])
ax1.plot(x, y1)

ax2 = plt.subplot(gs[1])
ax2.plot(x, y2)

ax3 = plt.subplot(gs[2])
ax3.plot(x, y3)

ax4 = plt.subplot(gs[3])
ax4.plot(x, y4)

plt.show()

使用 gridspec 模块创建子图时,需要使用 GridSpec() 函数来指定子图的行数、列数、高度比例和宽度比例等参数。在上例中,我们创建了一个 2 行 2 列的网格布局,其中第一行的高度比例为 1,第二行的高度比例为 2,第一列的宽度比例为 2,第二列的宽度比例为 1。

然后,我们通过 subplot() 函数来创建子图。在这里,我们传入的是 gridspec 对象的索引来指定每个子图所在的位置。

输出结果如下:

gridspec-subplot-example

可以看出,每个子图的大小都是不同的,因为我们在 GridSpec() 函数中指定了不同的高度比例和宽度比例。

总结

通过本文的介绍,我们学习了如何在 Matplotlib 中创建不同大小的子图。可以使用 gridspec 模块来实现。通过指定子图的行数、列数、高度比例和宽度比例等参数,可以灵活地创建不同大小的子图。