web-dev-qa-db-ja.com

Matplotlib-サブプロットにサブプロットを追加しますか?

2x2グリッドで構成される図を作成しようとしています。各象限には2つの垂直に積み上げられたサブプロット(つまり、2x1グリッド)があります。しかし、これを達成する方法を理解できないようです。

私が得た最も近いのはgridspecといくつかのsomeいコードを使用することです(以下を参照)が、gridspec.update(hspace=X)はすべてのサブプロットの間隔を変更するので、私はまだ行きたい場所ではありません。

理想的には、下の図を例に使用して、各象限内のサブプロット間の間隔を小さくし、上下の象限間の垂直方向の間隔を増やします(つまり、1〜3〜2〜4)。

これを行う方法はありますか?私が当初想定していたのは、各サブサブプロットグリッド(つまり、各2x1グリッド)を生成し、それらをサブプロットのより大きな2x2グリッドに挿入することですが、サブプロットをサブプロットに追加する方法がわかりません方法。

enter image description here

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
plt.figure(figsize=(10, 8))
gs = gridspec.GridSpec(4,2)
gs.update(hspace=0.4)
for i in range(2):
    for j in range(4):
        ax = plt.subplot(gs[j,i])
        ax.spines['top'].set_visible(False)
        ax.spines['right'].set_visible(False)
        plt.tick_params(which='both', top='off', right='off')
        if j % 2 == 0:
            ax.set_title(str(i+j+1))
            ax.plot([1,2,3], [1,2,3])
            ax.spines['bottom'].set_visible(False)
            ax.get_xaxis().set_visible(False)   
        else:
            ax.plot([1,2,3], [3,2,1])
22
dan_g

SubplotSpecを使用してGridSpecをネスト できます。外側のグリッドは2 x 2、内側のグリッドは2 x 1になります。次のコードは基本的な考え方を示しています。

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

fig = plt.figure(figsize=(10, 8))
outer = gridspec.GridSpec(2, 2, wspace=0.2, hspace=0.2)

for i in range(4):
    inner = gridspec.GridSpecFromSubplotSpec(2, 1,
                    subplot_spec=outer[i], wspace=0.1, hspace=0.1)

    for j in range(2):
        ax = plt.Subplot(fig, inner[j])
        t = ax.text(0.5,0.5, 'outer=%d, inner=%d' % (i,j))
        t.set_ha('center')
        ax.set_xticks([])
        ax.set_yticks([])
        fig.add_subplot(ax)

fig.show()

enter image description here

38
Suever