前回、matplotlibでヒートマップを高速描画する簡単な方法について書いた。
spcx8.hatenablog.com
上記の方法は、普通のヒートマップでは描画速度が著しく落ちるようなデータの多いケースに有効。裏を返すと、データの少ない場合(例えば行10x列10とか)は、seabornのヒートマップでも速度は変わらない。そして細かい設定をしたい場合はのseabornの方が何かと便利だったりする。
色で表している値を数字でも表示したかったり、各行・各列のラベルを軸に表示したい場合、seabornは簡単にできる。
参考:Seaborn でヒートマップを作成する – Python でデータサイエンス
でもmatplotlibで押し通すことも可能で、以下のコードがその例。
import numpy as np
import matplotlib.pyplot as plt
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)
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()
結果:
matplotlibのimshowをヒートマップ の表示に使い、その値の数字表示と軸ラベルの調整もmatplotlibのみで行なっている。
もう他のライブラリを覚えるのも面倒だどか、matplotlibを使いこなすことが苦じゃない場合にどうぞ。