Programing

Python에서 공유 축이있는 GridSpec

crosscheck 2021. 1. 8. 21:17
반응형

Python에서 공유 축이있는 GridSpec


다른 스레드에 대한 이 솔루션gridspec.GridSpecplt.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()

여기에 이미지 설명 입력


Joe의 선택은 나에게 몇 가지 문제를 안겨주었습니다. 전자는 figure.tight_layout대신 직접 사용 figure.set_tight_layout()하고 후자는 일부 백엔드 ( UserWarning : tight_layout : fall back to Agg renderer )와 관련된 문제였습니다. 그러나 Joe의 대답은 또 다른 소형 대안을 향한 내 길을 분명히 보여주었습니다. 이것은 OP에 가까운 문제에 대한 결과입니다.

import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=2, ncols=1, sharex='col', sharey=True,
                               gridspec_kw={'height_ratios': [2, 1]},
                               figsize=(4, 7))
fig.set_tight_layout({'rect': [0, 0, 1, 0.95], 'pad': 1.5, 'h_pad': 1.5})
plt.setp(axes, title='Test')
fig.suptitle('An overall title', size=20)

plt.show()

여기에 이미지 설명 입력

참조 URL : https://stackoverflow.com/questions/22511550/gridspec-with-shared-axes-in-python

반응형