Pythonのメモ帳

numpy, pandas, tensorflow を使いこなすための忘備録

matplotlibのimshowでヒートマップを高速描画する際の縦横比(アスペクト比) 調整

前回、matplotlibでヒートマップを高速描画する簡単な方法について書いた。
spcx8.hatenablog.com

 

これの欠点は、グラフの縦横比が固定されるので、plt.figure(figsize=(*,*)) だけでは調節できないこと。ただ、それもplt.imshow()の引数を調整すれば問題ない。

 まずは、縦横比調整無しの場合のコード。

import numpy as np
import matplotlib.pyplot as plt

# 20x5のダミーデータ作成
mat = np.random.rand(20,5)

# グラフ表示
plt.figure(figsize=(7,5))
plt.imshow(mat,interpolation='nearest',cmap='jet')
plt.colorbar()
plt.show()

 結果:

f:id:spcx8:20181006233433p:plain

ここでは、図のサイズについてfigsize=(7,5)とやや横長で指定しているが、縦長のグラフになってしまっている。(imshowで20x5ピクセルの絵として描画しているので当たり前の結果)

 

次に縦横比を調節したコード。

import numpy as np
import matplotlib.pyplot as plt

# 20x5のダミーデータ作成
mat = np.random.rand(20,5)

# グラフ表示
plt.figure(figsize=(7,5))
plt.imshow(mat,interpolation='nearest',cmap='jet',aspect=0.25) # aspectで縦横比を調整
plt.colorbar()
plt.show()

結果:

f:id:spcx8:20181006233429p:plain

plt.imshow()の引数aspectで描画する絵の縦横比を調整している。ここでは、aspect=0.25 とすることで、横に比べて縦の長さを0.25倍にしている。