Seabornのheatmap
関数を使用して、色エンコードされたマトリックスとして矩形データをプロットする方法について解説します。heatmap
関数はデータを色で表現したヒートマップを作成するために使われ、データのパターンや相関を視覚的に理解しやすくします。
基本的な使用方法
以下のようなシンプルなコードで、簡単なヒートマップを作成することができます。
import seaborn as sns
# データセットの読み込み
data = # 2Dデータセット(例えば、PandasのDataFrame)
# ヒートマップの描画
sns.heatmap(data)
seabornに渡すパラメータ
いくつかのパラメータを指定することで、ヒートマップの見た目を調整することができます。
data
: 矩形データセット。ndarrayに変換できる2Dデータセットで、Pandas DataFrameが提供された場合は、インデックス/カラム情報がラベルに使用されます。vmin
,vmax
: カラーマップをアンカーする値。指定されていない場合は、データと他のキーワード引数から推測されます。cmap
: データ値から色空間へのマッピング。指定されていない場合は、center
が設定されているかどうかによってデフォルトが変わります。center
: 発散データをプロットする際にカラーマップを中心に設定する値。このパラメータを使用すると、指定されていない場合のデフォルトのcmap
が変更されます。robust
:True
の場合、vmin
またはvmax
がないときに、極端な値ではなく頑健な分位数でカラーマップの範囲が計算されます。annot
:True
の場合、各セルにデータ値を記述します。データと同じ形状の配列のようなものであれば、データの代わりにこれを使用してヒートマップに注釈を付けます。fmt
: 注釈を追加する際に使用する文字列フォーマットコード。cbar
: カラーバーを描画するかどうか。
よく使われるものを例示しましたが、このほかのパラメータも設定可能です。詳しくはこちらの公式ページを参考にしてください。
heatmap作成のチュートリアル
それでは、具体的にいくつかの例を通してヒートマップを作成してみましょう。
基本的なヒートマップの作成
まず、Seabornが提供するload_dataset
関数でデータセットをロードし、pivot
メソッドを使用してDataFrameを再構成します。これにより、数字データの部分のみが読み込まれるようになります。この例ではglue
データセットを使用し、モデルごとのタスクスコアをヒートマップにします。
import seaborn as sns
# データセットのロードとピボット
glue = sns.load_dataset("glue").pivot(index="Model", columns="Task", values="Score")
# ヒートマップの作成
sns.heatmap(glue)
このコードを実行すると以下のようなヒートマップが生成されます。

セルの値の注釈付け
annot=True
を指定することで、各セルに数値を注釈として表示できます。これにより、値を一目で確認できるようになります。
sns.heatmap(glue, annot=True)

注釈のフォーマット
fmt
パラメータを使用して、注釈の数値フォーマットを制御できます。例えば、fmt=".1f"
とすると、小数点以下1桁までの数値が表示されます。
sns.heatmap(glue, annot=True, fmt=".1f")

別のDataFrameを使った注釈
注釈に別のDataFrameを使用して、例えばランキングなど別の情報を表示することもできます。
sns.heatmap(glue, annot=glue.rank(axis="columns"))

セル間に線を追加
linewidths
パラメータを使ってセル間に線を追加し、視覚的な分離を強調できます。
sns.heatmap(glue, annot=True, linewidths=.5)

カラーマップの選択
cmap
パラメータを使用して、様々なカラーマップから選択したり、カラーマップオブジェクトを渡してカスタマイズしたりできます。
# 名前で選択
sns.heatmap(glue, cmap="crest")
# カラーマップオブジェクトを使用
sns.heatmap(glue, cmap=sns.cubehelix_palette(as_cmap=True))


カラーマップの範囲の調整
vmin
とvmax
を設定することで、データ値に対応するカラーマップの最小点と最大点を指定できます。
sns.heatmap(glue, vmin=50, vmax=100)

matplotlibの軸オブジェクトを使用したカスタマイズ
sns.heatmap
はmatplotlibの軸(Axes)オブジェクトを返すため、これを使用してプロットをさらに微調整することが可能です。
ax = sns.heatmap(glue, annot=True)
ax.set(xlabel="", ylabel="")
ax.xaxis.tick_top()

まとめ
以上の方法で、Seabornのheatmap
関数を使って、さまざまなデータの相関やパターンを視覚的に表現するヒートマップを作成することができます。データの分析やプレゼンテーションに役立ててください。