matplotlib中是否存在在子地块中定义子地块网格的工具?

matplotlib中是否存在在子地块中定义子地块网格的工具?,matplotlib,Matplotlib,我有一个绘图布局,我想使用其中9个不同的数据集群在一个正方形网格上布局。网格中的每个方框包含3个并排布置的方框图 我最初的想法是,这将适合3x3子地块布局,每个单独的子地块本身被划分为3x1子地块布局 我已经看到了这一点:它似乎可以让您在子地块中定义单独的、手动放置的绘图。然而,递归地将子地块空间分割成

我有一个绘图布局,我想使用其中9个不同的数据集群在一个正方形网格上布局。网格中的每个方框包含3个并排布置的方框图

我最初的想法是,这将适合3x3子地块布局,每个单独的子地块本身被划分为3x1子地块布局


我已经看到了这一点:它似乎可以让您在子地块中定义单独的、手动放置的绘图。然而,递归地将子地块空间分割成<10个容易寻址的子地块的网格的想法似乎是如此明显,我不敢相信它没有被直接实现

Matplotlib具有平面层次结构。您有一个图形,其中有一个未确定且未绑定的数字轴。因此,子地块的子地块不存在。但当然,您可以放置轴,使其看起来嵌入到其他子地块中

不过,可能的情况是使用几层子地块栅格。 详细内容请参见。 您可能对使用
gridspecfromsublotspec
特别感兴趣,它允许生成:


我认为嵌套的gridspec示例正是您想要的

我已经将他们的示例改编为您描述的网格模式的模型,该模型使用gridspec创建轴列表,然后迭代它们的索引来填充它们。这种方法应该符合“3x3子地块布局,每个单独的子地块本身被划分为3x1子地块布局”的需要

我希望这能帮助你开始

编辑以包含图像:


谢谢欧内斯特,我会调查一下的——我一开始不清楚发布的代码是如何在下面的axis布局中产生结果的,但我会仔细看看,谢谢你的引导。
gs0 = gridspec.GridSpec(1, 2)

gs00 = gridspec.GridSpecFromSubplotSpec(3, 3, subplot_spec=gs0[0])
gs01 = gridspec.GridSpecFromSubplotSpec(3, 3, subplot_spec=gs0[1])
import matplotlib as mpl
from matplotlib import gridspec
from matplotlib import pyplot as plt

f= plt.figure(figsize=(5, 5))
gs = gridspec.GridSpec(3, 3, wspace=0.5, hspace=0.2) #these are the 9 clusters

for i in range(9):
    nested_gs = gridspec.GridSpecFromSubplotSpec(1, 3, subplot_spec=gs[i], wspace=0.5) # 1 row, 3 columns for each cluster

    for j in range(3): #these are the 3 side by side boxplots within each cluster
        ax = plt.Subplot(f, nested_gs[j])
        ax.text(0.5, 0.5, "ax%d" % (i+1), va="center", ha="center", fontsize=9)
        
        #ax.boxplot(data) # this is where you'd add your boxplots to the axes
        
        # the following just cleans up each axes for readability
        for tl in ax.get_xticklabels():
            tl.set_visible(False)
        for tl in ax.get_yticklabels():
            tl.set_visible(False)
            if ax.is_first_col():
                tl.set_visible(True)
                tl.set_fontsize(9)
        f.add_subplot(ax)

f.savefig('nested_subplot.png')