如何绘制具有不同 colspan 的四个子图?

Ahm*_*mad 3 python plot matplotlib subplot

我尝试使用matplotlib.pyplot如下方式拟合四张图像:

| plot1 | plot2|
|    plot3     |
|    plot4     |
Run Code Online (Sandbox Code Playgroud)

我发现的大多数例子都涵盖了三个这样的图:

ax1 = plt.subplot(221)
ax2 = plt.subplot(222)
ax3 = plt.subplot(212)
Run Code Online (Sandbox Code Playgroud)

这成功地绘制了三个图(但是,我不明白它是如何完成的ax3)。现在,我想将情节 4 添加到此安排中。无论我尝试什么,我都无法成功。

你能指导我如何实现它吗?

She*_*ore 6

您可以使用subplot2grid。这真的很方便。

文档说

在网格中创建子图。网格由形状指定,在 loc 的位置,跨越每个方向的 rowspan 和 colspan 单元格。loc 的索引是从 0 开始的。

首先,您在(3,2)此处根据行数和列数定义大小。然后定义特定子图的起始(行、列)位置。然后分配该特定子图跨越的行/列数。行跨度和列跨度的关键字分别是rowspancolspan

import matplotlib.pyplot as plt

ax1 = plt.subplot2grid((3, 2), (0, 0), colspan=1)
ax2 = plt.subplot2grid((3, 2), (0, 1), colspan=1)
ax3 = plt.subplot2grid((3, 2), (1, 0), colspan=2)
ax4 = plt.subplot2grid((3, 2), (2, 0), colspan=2)
plt.tight_layout()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


Ahm*_*mad 3

在较新版本的 matplotlib 中,您可以使用subplot_mosaic

fig, axes = plt.subplot_mosaic("AB;CC;DD")
Run Code Online (Sandbox Code Playgroud)

它为您提供了此结构中的四个子图:

                  AB          | A | B |
AB;CC;DD    ->    CC    ->    |   C   |
                  DD          |   D   |
Run Code Online (Sandbox Code Playgroud)

为了避免标签重叠,请启用constrained_layout

fig, axes = plt.subplot_mosaic("AB;CC;DD", constrained_layout=True)
Run Code Online (Sandbox Code Playgroud)

约束马赛克示例