GridSpecを使って複数の図を柔軟に配置してみよう

In [1]:
from matplotlib import pyplot as plt
from matplotlib.gridspec import GridSpec

表現するのに必要なグリッド数で枠組みを作って、それぞれの要素をどの領域に配置するかを指定していく

  • 6×7のグリッドを作成
  • 右3列は少し狭めにしたいので、幅の比率を小さくする(2:1の幅)
  • 0,1列目は0-4行目のグリッドにそれぞれプロット
  • 2,3列目は0-5行目のグリッドにそれぞれプロット
  • 4-6列目は1-4行目のグリッドにまたがってプロット
  • 軸メモリ、ラベルは不要なので、各プロットに対して軸無しを設定
In [2]:
fig = plt.figure(figsize=(15,15), facecolor='c')

# raw=6, col=7, width_ratios = [2,2,2,2,1,1,1]
gs = GridSpec(6, 7, width_ratios=[2]*4+[1]*3, figure=fig)


for c in range(0,2):
    for r in range(5):
        ax = fig.add_subplot(gs[r,c], facecolor = 'white')
        ax.annotate("({}, {})".format(r,c), (0.5, 0.5), size = 15, va='center', ha='center')
        ax.set_xticks([])
        ax.set_yticks([])
        
for c in range(2,4):
    for r in range(6):
        ax = fig.add_subplot(gs[r,c], facecolor = 'white')
        ax.annotate("({}, {})".format(r,c), (0.5, 0.5), size = 15, va='center', ha='center')
        ax.set_xticks([])
        ax.set_yticks([])

for c in range(4,7):
    ax = fig.add_subplot(gs[1:5,c], facecolor = 'white')
    ax.annotate("([1:5], {})".format(c), (0.5, 0.5), size = 20, va='center', ha='center')
    ax.set_xticks([])
    ax.set_yticks([])

plt.show()
In [ ]:
 
In [ ]:
 
In [ ]: