31
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

matplotlibで複数のグラフを表示するときのサイズを揃える

Last updated at Posted at 2019-01-27

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()

image.png
こんな感じでずれてしまう。
もしこれが時系列データとかで上下で比較するときには不便なので
ならべて表示する必要がある。

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])

image.png

揃った。
tight_layoutでラベル等が重ならないようにしてから、canvas.drawをした後位置を取得する
参考(https://qiita.com/skotaro/items/01d66a8c9902a766a2c0

31
35
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?