matplotlibでカラーバー付きのグラフやラインプロットの複数のグラフを表示するときに、グラフのサイズが揃わなかったのでその対処
例えばこんな感じでカラーバー付きのグラフとラインプロットを並べて表示すると
from matplotlib import pyplot as plt
import numpy as np
from mpl_toolkits.axes_grid1 import make_axes_locatable
data1 = np.random.rand(20,20)
data2 = np.random.rand(100)
fig = plt.figure()
ax1 = fig.add_subplot(211)
im = ax1.imshow(data1,aspect='auto')
divider1 = make_axes_locatable(ax1)
cax1 = divider1.append_axes("right", size="2%", pad=0.1)
cbar = plt.colorbar(im,cax=cax1)
ax2 = fig.add_subplot(212)
ax2.plot(data2)
fig.tight_layout()
こんな感じでずれてしまう。
もしこれが時系列データとかで上下で比較するときには不便なので
ならべて表示する必要がある。
from matplotlib import pyplot as plt
import numpy as np
from mpl_toolkits.axes_grid1 import make_axes_locatable
data1 = np.random.rand(20,20)
data2 = np.random.rand(100)
fig = plt.figure()
ax1 = fig.add_subplot(211)
im = ax1.imshow(data1,aspect='auto')
divider1 = make_axes_locatable(ax1)
cax1 = divider1.append_axes("right", size="2%", pad=0.1)
cbar = plt.colorbar(im,cax=cax1)
ax2 = fig.add_subplot(212)
ax2.plot(data2)
fig.tight_layout()
##これを付け足すと揃う
fig.canvas.draw()
axpos1 = ax1.get_position() # 上の図の描画領域
axpos2 = ax2.get_position() # 下の図の描画領域
#幅をax1と同じにする
ax2.set_position([axpos2.x0, axpos2.y0, axpos1.width, axpos2.height])
揃った。
tight_layoutでラベル等が重ならないようにしてから、canvas.drawをした後位置を取得する
参考(https://qiita.com/skotaro/items/01d66a8c9902a766a2c0 )