Pythonのメモ帳

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

matplotlibのimshowでヒートマップを高速描画する際の、値の記入や軸ラベルの設定方法

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

 

上記の方法は、普通のヒートマップでは描画速度が著しく落ちるようなデータの多いケースに有効。裏を返すと、データの少ない場合(例えば行10x列10とか)は、seabornのヒートマップでも速度は変わらない。そして細かい設定をしたい場合はのseabornの方が何かと便利だったりする。

色で表している値を数字でも表示したかったり、各行・各列のラベルを軸に表示したい場合、seabornは簡単にできる。

参考:Seaborn でヒートマップを作成する – Python でデータサイエンス

 

でもmatplotlibで押し通すことも可能で、以下のコードがその例。

import numpy as np
import matplotlib.pyplot as plt

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

# ヒートマップを作成
plt.figure(figsize=(7,5))
plt.imshow(mat,interpolation='nearest',cmap='jet',aspect=0.25,alpha=0.5) # aspectで縦横比を調整

# グラフ内に値を書き込む
ys, xs = np.meshgrid(range(mat.shape[0]),range(mat.shape[1]),indexing='ij')
for (x,y,val) in zip(xs.flatten(), ys.flatten(), mat.flatten()):
    plt.text(x,y,'{0:.2f}'.format(val), horizontalalignment='center',verticalalignment='center',)

# 軸ラベルを設定   
group = ['A','B','C','D','E']
names = ['Lot{0:02d}'.format(i+1) for i in range(20)] # 内包表記
plt.xticks(xs[0,:], group)
plt.yticks(ys[:,0], names)  

plt.colorbar()
plt.show()

  結果:

f:id:spcx8:20181008071053p:plain

 matplotlibのimshowをヒートマップ の表示に使い、その値の数字表示と軸ラベルの調整もmatplotlibのみで行なっている。

もう他のライブラリを覚えるのも面倒だどか、matplotlibを使いこなすことが苦じゃない場合にどうぞ。