在单个 matplotlib 图上嵌入多个 gridspec 布局?

Embedding multiple gridspec layouts on a single matplotlib figure?

我正在使用 python 图形库 matplotlib 来绘制报告中的几件事,我发现自己需要在较小图形的任意网格上方放置几个固定计数的图形。我四处搜索,但找不到任何可以让我在单个 matplotlib 图形上使用两个 gridspec 布局的东西。我本质上想要的是:

我知道如果第二组中每行的图形数量是偶数,我可以破解一些解决方案。但是如果每一行都有一个奇数,那么这样的解决方案是不可能的。例如,假设我在小图部分每行有 5 个图,那么不可能在它们上方并排放置两个大小相等的图,并且 gridspec 不允许您指定小数索引(而且它不应该) .

在我看来,正确的解决方案是在单个图形上有两个单独的网格规范布局,一个用于上半部分的固定计数图,然后一个用于下半部分较小图形的编程缩放网格规范。我在带有 gridspec 或子图的 matplotlib 中没有找到这样的解决方案,所以有人对使用 matplotlib 设置这样的图形有什么建议吗?

Matplotlib 的 matplotlib.gridspec 模块包含一个名为 gridspec.GridSpecFromSubplotSpec 的 class。与 gridspec.GridSpec 一样,它采用 nrow 和 ncols 参数,允许您指定子图将 occupy/span 的单元格,但它还需要一个 SubplotSpec 对象,它可以是单元格或单元格跨度一个 GridSpec 对象。返回的对象是 GridSpec,它取决于用于创建它的 SubplotSpec 的单元格尺寸。

示例:

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

outer_grid = gridspec.GridSpec(1,2) # gridspec with two adjacent horizontal cells
left_cell = outer_grid[0,1] # the left SubplotSpec within outer_grid

inner_grid = gridspec.GridSpecFromSubplotSpec(2,1, left_cell)

# From here we can plot usinginner_grid's SubplotSpecs
ax1 = plt.subplot(inner_grid[0,0])
ax2 = plt.subplot(inner_grid[1,0])

ax1.plot(data)
ax2.plot(other_data)

plt.show()

这段代码的结果是:

---------------------------------
|               |---------------|
| We didn't plot| |     |other| |
| anything here.| |data |data | |
|               | |     |     | |
|               |---------------|
---------------------------------