matplotlib 서브 플롯의 비율과 간격을 한 번에 조정

하고 싶은 일



이런 식으로, 폭이 다른 subplot를 기호의 간격으로 플롯 할 수 있도록 하고 싶다.


결론


plt.subplots()gridspec_kw 되는 인수 로 한번 해결!

설명



여백을 조정하면서 폭과 높이가 다른 subplot을 만들려면 예를 들어 @simonritchie님의 Qiita 기사 에서 소개된 대로 GridSpec() 를 사용하면 됩니다. 공식 사용자 가이드 도 거의 같은 방법을 소개하고 있는 것 같습니다.

그러나 이러한 기사에서는 복잡한 레이아웃의 그림을 만들고 있어 상당히 기술량이 많은 처리가 되고 있습니다. 다만 단순히 비율이 다른 만큼의 그림을 만들고 싶을 뿐인데, 같은 처리를 쓰는 것은 상당히 귀찮습니다. "더 쉬운 방법 없을까-"라고 생각하고, 아무렇지도 않게 plt.subplots() 의 인수를 바라보고 있으면 발견했습니다. gridspec_kw 입니다! 그렇습니다!
plt.subplots() 가 내부적으로 GridSpec() 를 부르고 있어, 그 때에 먹일 수 있는 인수를 지정할 수 있는 패턴입니다. 시메시메.

공식 API 에서 GridSpec 의 인수를 조사해 주면, 폭/높이의 조정은 width_ratiosheight_ratios 알아요.

그래서 wspace 에 이러한 값을 지정하는 사전을 먹이면 OK입니다!
물론 hspace/gridspeck_kw 같은 sharex 다른 인수와 함께 사용할 수 있습니다.
import matplotlib.pyplot as plt

fig, axes = plt.subplots(
    3, 2, # 縦 x 横
    gridspec_kw=dict(width_ratios=[1,5], height_ratios=[1,4,4], wspace=0.1, hspace=0.3), # 今回のミソ
    sharex='col', sharey='row', figsize=(6, 7) # もちろん他の引数と併用可
)

## ところで、なんで subplotsの順番は nrows x ncolなのに、figsizeは (横, 縦) なんだろう?

그리고는 손에 넣은 sharey 에 대해서 좋아하는 플롯 조작을 하는 것 뿐입니다.

(덧붙여서, 「왼쪽 위의 ax 이란」이라고 하는 경우에는 plt.subplots() 입니다.)

이상입니다. 끝까지 읽어 주셔서 감사합니다!

추가:
기사 중에서 언급한 공식 사용자 가이드 의 절에도, gridspeck_kw에 대한 언급이 있었던 것을 보충하겠습니다.
또한 비슷한 방법은 다른 기사에서도 이미 소개되었던 것을 발견했기 때문에 참고로 링크를 붙입니다.
h tps : // s t c ゔ ぇ rf ぉ w. 코 m / 쿠에 s 치온 s / 10388462 / 마 tp t t ぃ b ぢ

좋은 웹페이지 즐겨찾기