1. ホーム
  2. python

[解決済み] Pythonで軸を共有するGridSpec

2023-06-08 10:49:09

質問

この解決策 を別のスレッドで提案しています。 gridspec.GridSpec の代わりに plt.subplots . しかし、サブプロット間で軸を共有する場合、通常、次のような構文を使用します。

  fig, axes = plt.subplots(N, 1, sharex='col', sharey=True, figsize=(3,18))

どのようにすれば sharexsharey を使用した場合 GridSpec ?

どのように解決するのですか?

まず最初に、少し不正確であっても構わないのであれば、元の問題に対するより簡単な回避策があります。サブプロットのトップ エクステントをリセットして、デフォルトの の後に と呼びます。 tight_layout :

fig, axes = plt.subplots(ncols=2, sharey=True)
plt.setp(axes, title='Test')
fig.suptitle('An overall title', size=20)

fig.tight_layout()
fig.subplots_adjust(top=0.9) 

plt.show()

<イグ


ただ、ご質問にお答えすると、gridspecを使うには、少し低いレベルでサブプロットを作成する必要があります。 のような共有軸の隠蔽を再現したい場合は subplots のように共有軸の非表示を再現したい場合は、手動で sharey の引数を Figure.add_subplot で重複したテロップを非表示にし plt.setp(ax.get_yticklabels(), visible=False) .

例として

import matplotlib.pyplot as plt
from matplotlib import gridspec

fig = plt.figure()
gs = gridspec.GridSpec(1,2)
ax1 = fig.add_subplot(gs[0])
ax2 = fig.add_subplot(gs[1], sharey=ax1)
plt.setp(ax2.get_yticklabels(), visible=False)

plt.setp([ax1, ax2], title='Test')
fig.suptitle('An overall title', size=20)
gs.tight_layout(fig, rect=[0, 0, 1, 0.97])

plt.show()

<イグ