Python
 Computer >> コンピューター >  >> プログラミング >> Python

Matplotlib/Seabornのヒートマップで特定のセルにカスタム枠線を追加する方法

MatplotlibやSeabornで作成したヒートマップにおいて、特定のセルだけにカスタム枠線(ボーダー)を追加したいケースはよくあります。例えば、注目したいデータ領域を強調表示したり、クラスタリング結果の一部を目立たせたりする場合です。この記事では、sns.clustermap()で作成したヒートマップの任意のセルに、色付きの矩形パッチを使って枠線を描画する方法を解説します。

実装手順

  • 図のサイズを設定し、figure.autolayoutを有効にしてサブプロット間・周囲の余白を自動調整します。
  • 複数の列を持つpandasのデータフレームを作成します。
  • sns.clustermap()を使い、行列データセットを階層的クラスタリング付きのヒートマップとして描画します。
  • ClusterGridオブジェクトのax_heatmap属性から、ヒートマップ部分のAxesを取得します。
  • 枠線の色を格納する変数border_colorを初期化します。
  • plt.Rectangle()で矩形パッチを作成し、add_patch()メソッドでヒートマップのAxesに追加します。このときfill=Falseを指定することで塗りつぶしなしの枠線のみになります。
  • plt.show()メソッドで図を表示します。

コード例

import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns

# 図のサイズとレイアウトの設定
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

# サンプルデータフレームを作成
df = pd.DataFrame({"col1": [1, 4, 2, 3, 5], "col2": [3, 4, 1, 5, 2]})

# 階層クラスタリング付きヒートマップを描画
g = sns.clustermap(df, figsize=(7.50, 3.50))

# ヒートマップのAxesを取得
ax = g.ax_heatmap

# 枠線の色を指定
border_color = "yellow"

# 指定したセルに矩形パッチ(枠線)を追加
ax.add_patch(plt.Rectangle((1, 2), 2, 1, fill=False,
                           edgecolor=border_color, lw=5))

plt.show()

出力結果

上記のコードを実行すると、黄色い太い枠線がヒートマップ上の指定されたセル範囲(x=1, y=2の位置から幅2・高さ1の領域)に描画されます。

Matplotlib/Seabornのヒートマップで特定のセルにカスタム枠線を追加する方法

ポイント解説

  • plt.Rectangle((x, y), width, height):左下隅の座標(x, y)と幅・高さを指定して矩形を定義します。セル単位で指定する場合は、セルのインデックスに対応する座標を渡します。
  • fill=False:矩形内部を透明にし、枠線だけを表示します。
  • lw(linewidth):枠線の太さを制御します。値を大きくすると強調効果が高まります。
  • edgecolor:枠線の色を指定します。「yellow」以外にも「red」や「#FF0000」のようなカラーコードも使用可能です。

なお、sns.clustermap()ではなく通常のsns.heatmap()を使う場合も、返り値のAxesに対して同じようにadd_patch()を呼び出すことで同様の枠線追加が可能です。

  1. Seabornで2つのグラフを横に並べてプロットする方法(Matplotlib)

    データ分析では、複数のグラフを1つの図の中に並べて比較できると非常に便利です。この記事では、SeabornとMatplotlibを組み合わせて、2つのグラフを横並び(1行2列)で表示する方法を解説します。 実装の流れ 2つのグラフを並べて描画するには、以下の手順を実行します。 plt.subplots(1, 2) を使い、figureサイズ(7, 7)で1行2列のサブプロットを作成します。 Pandasを使って、col1 と col2 のキーを持つデータフレームを作成します。 countplot() メソッドを使用し、カテゴリごとの観測値の件数を棒グラフで可視化します。 subplots_a

  2. Matplotlibでhist2dプロットにカラーバーを追加する方法

    Matplotlibのhist2dプロット(2次元ヒストグラム)にカラーバーを追加するには、colorbar()メソッドの引数にスカラーマッピング可能なオブジェクト(ScalarMappable)を渡します。 実装手順 NumPyを使ってxとyのデータポイントを作成します。 subplots()メソッドを使って、図とサブプロットを作成します。 hist2d()メソッドを使って、2次元ヒストグラムを描画します。 hist2dから返されるスカラーマッピングオブジェクトをもとに、colorbar()でカラーバーを作成します。 show()メソッドを使って、図を表示します。 コード例 import