Seabornによるヒートマップ(heatmap)の作り方

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)

このコードを実行すると以下のようなヒートマップが生成されます。

basic seaborn heatmap

セルの値の注釈付け

annot=Trueを指定することで、各セルに数値を注釈として表示できます。これにより、値を一目で確認できるようになります。

sns.heatmap(glue, annot=True)
seaborn heatmap, annot

注釈のフォーマット

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

sns.heatmap(glue, annot=True, fmt=".1f")
seaborn heatmap, annot

別のDataFrameを使った注釈

注釈に別のDataFrameを使用して、例えばランキングなど別の情報を表示することもできます。

sns.heatmap(glue, annot=glue.rank(axis="columns"))
seaborn heatmap, another annotation

セル間に線を追加

linewidthsパラメータを使ってセル間に線を追加し、視覚的な分離を強調できます。

sns.heatmap(glue, annot=True, linewidths=.5)
seaborn heamap, line between cells

カラーマップの選択

cmapパラメータを使用して、様々なカラーマップから選択したり、カラーマップオブジェクトを渡してカスタマイズしたりできます。

# 名前で選択
sns.heatmap(glue, cmap="crest")

# カラーマップオブジェクトを使用
sns.heatmap(glue, cmap=sns.cubehelix_palette(as_cmap=True))
seaborn heatmap, color map
名前で選択
seaborn heatmap, color map
カラーマップオブジェクトを使用

カラーマップの範囲の調整

vminvmaxを設定することで、データ値に対応するカラーマップの最小点と最大点を指定できます。

sns.heatmap(glue, vmin=50, vmax=100)
seaborn heatmap, adjastment of color map

matplotlibの軸オブジェクトを使用したカスタマイズ

sns.heatmapはmatplotlibの軸(Axes)オブジェクトを返すため、これを使用してプロットをさらに微調整することが可能です。

ax = sns.heatmap(glue, annot=True)
ax.set(xlabel="", ylabel="")
ax.xaxis.tick_top()
seaborn heatmap, matplotlib

まとめ

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

上部へスクロール