【Python】matplotlibでヒートマップ+カラーバー作成(imshow)
- ヒートマップをpythonで図示したい
- カラーバーもカスタマイズしたい
本記事では、配列を視覚的に図示するヒートマップをPythonのmatplotlibを利用して作成する方法を紹介していきます。
今回は、matplotlibのimshowを使用して簡単にヒートマップを作成していきます!
本記事を読むことで、カラーバーつきの綺麗なヒートマップが作成できること間違いなしです。
*本記事ではmatplotlibを一度は触ったことがあることを前提に記事を作成しています(一度も触ったことがない方は下記を参考にしてください)
ヒートマップを作成する準備
まずは、ヒートマップを作成するためのライブラリをインポートしましょう。
import numpy as np
import matplotlib.pyplot as plt
ヒートマップの作成方法
ヒートマップをmatplotlibで作成する場合は、Axes.imshow()
を使用します。
まずは、引数を簡単にまとめておきます。
引数 | 説明 |
---|---|
cmap | カラーマップを指定(後ほど詳しく解説) |
norm | データを[0, 1] の範囲に正規化 |
aspect |
アスペクト比を設定します
|
alpha | 透明度を0〜1で指定 |
この段階で引数を完全に覚える必要はありません。
このあと具体例を使って使い方を紹介していきます。
基本的なヒートマップを作成
まずは、基本的なヒートマップを作成してみます。
具体例を下記で紹介します。
sample = np.random.rand(30, 30)
fig, ax = plt.subplots()
ax.imshow(sample)
plt.show()
<output>
このように簡単にヒートマップを作成することができます。
カラーマップを変更する
カラーマップを変更する場合は、imshowの引数『cmap』に具体的なカラーマップを指定します。
カラーマップの一覧は下記からアクセスすることができます。
今回は具体例として『gnuplot』を使用した具体例を紹介します。
sample = np.random.rand(30, 30)
fig, ax = plt.subplots()
ax.imshow(sample, cmap='gnuplot')
plt.show()
<output>
『cmap = ‘gray’』を指定するグレースケールのヒートマップを作成することができます。
アスペクト比を調節
引数の『aspect』を指定することでアスペクト比を変更することができます。
よく使用するのは以下の二つです。
- equal : マス目が正方形になるように調節
- auto : axesオブジェクトに合うように調節
まずは、『equal』を設定した具体例を紹介します。
sample = np.random.rand(20, 30)
fig, ax = plt.subplots()
ax.imshow(sample, aspect='equal')
plt.show()
<output>
このようにマス目が正方形になるように自動で調節されます。
次に『auto』の具体例を表示します。
sample = np.random.rand(20, 30)
fig, ax = plt.subplots(figsize=(5,5))
im = ax.imshow(sample, aspect='auto')
plt.show()
<output>
設定したグラフに自動で合うように調節してくれます。
カラーバー付きのヒートマップを作成
カラーバー付きのヒートマップを作成する場合は、imshowとは別のcolorbarメソッドを使用します。
基本的なカラーバー付きのヒートマップ
具体例を表示した方が理解しやすいと思うので早速具体例を表示します。
sample = np.random.rand(30, 30)
fig, ax = plt.subplots()
im = ax.imshow(sample)
fig.colorbar(im, ax=ax)
plt.show()
<output>
colorbarの引数は以下の二つを設定してください。
- plotしたグラフ(im)
- ax : プロットしたいaxesオブジェクト
横向きのカラーバー付きヒートマップ
横付きのカラーバーを使用する場合は、colorbarの引数に『corientation=’horizontal’』を追加してください。
sample = np.random.rand(30, 30)
fig, ax = plt.subplots()
# autoを設定すると綺麗に表示される
im = ax.imshow(sample, aspect='auto')
fig.colorbar(im, ax = ax, orientation='horizontal')
plt.show()
<output>
複数のヒートマップを表示
最後に複数のヒートマップを表示する方法を紹介します。
これも具体例を示した方が早いと思うので早速具体例を示していきます。
sample1 = np.random.rand(30, 30)
sample2 = np.random.rand(30, 30)
sample3 = np.random.rand(30, 30)
sample4 = np.random.rand(30, 30)
fig, axes = plt.subplots(2, 2, constrained_layout=True)
im1 = axes[0,0].imshow(sample1, aspect='auto')
im2 = axes[0,1].imshow(sample2, aspect='auto', cmap='bwr')
im3 = axes[1,0].imshow(sample3, aspect='auto')
im4 = axes[1,1].imshow(sample4, aspect='auto', cmap='gnuplot')
fig.colorbar(im1, ax = axes[0, 1])
fig.colorbar(im4, ax = axes[1, 1])
plt.show()
<output>
ここまで、作成できるようになれば十分ですね!
参考資料
基本的に参考にした資料は『matplotlib tutorials』です。
- Sample plots in Matplotlib : 初心者の方はこのtutorialを読むことで基本的な可視化方法が学べます
まとめ
今回は、matplotlibを使用しヒートマップを作成する方法を紹介しました。
ヒートマップはデータを理解する際に強力なツールになります。
皆さんも習得して自身の研究や実務に利用してください。
Pythonによる可視化方法をもっと学びたい方は下記を参考にしてください。
Pythonを学習するのに効率的なサービスを紹介していきます。
まず最初におすすめするのは、Udemyです。
Udemyは、Pythonに特化した授業がたくさんあり、どの授業も良質です。
また、セール中は1500円定義で利用することができ、コスパも最強です。
下記の記事では、実際に私が15個以上の講義を受講して特におすすめだった講義を紹介しています。
他のPythonに特化したオンライン・オフラインスクールも下記の記事でまとめています。
自分の学習スタイルに合わせて最適なものを選びましょう。
また、私がPythonを学ぶ際に使用した本を全て暴露しているので参考にしてください。