Matplotlib・Seabornのsns.clustermapにデータセットや事前計算済み距離行列を渡す方法
概要
Seaborn の sns.clustermap() を使うと、行列形式のデータセットを「階層的クラスタリング」が適用されたヒートマップとして可視化できます。ここでは、基本的なデータセットの渡し方から、事前計算済みの距離行列を利用する方法までを解説します。
基本の手順
- sns.set_theme() で複数のテーマパラメータを一括設定する
- sns.load_dataset() でオンラインリポジトリからサンプルデータセット(iris)を読み込む(インターネット接続が必要)
- DataFrame.pop() メソッドで「species」列を取り除く。該当する列が見つからない場合は KeyError が発生する
- clustermap() メソッドで、行列データセットを階層的にクラスタリングされたヒートマップとして描画する
- plt.show() メソッドで図を表示する
コード例
from matplotlib import pyplot as plt
import seaborn as sns
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
sns.set_theme(color_codes=True)
iris = sns.load_dataset("iris")
species = iris.pop("species")
g = sns.clustermap(iris)
plt.show()
出力結果
上記のコードを実行すると、iris データセットの数値列に対して行方向・列方向それぞれに階層的クラスタリングが適用され、デンドログラム(樹形図)付きのヒートマップが表示されます。似た傾向を持つサンプルや特徴量が近くに配置されるため、データ全体の構造をひと目で把握できます。

事前計算済みの距離行列を渡す場合
すでに距離行列を計算している場合は、row_linkage や col_linkage 引数に scipy.cluster.hierarchy.linkage の結果を渡すことで、clustermap 側での距離計算をスキップできます。
from scipy.cluster.hierarchy import linkage # 行方向のリンケージ(事前計算済み距離行列から作成) row_link = linkage(iris, method="average") g = sns.clustermap(iris, row_linkage=row_link) plt.show()
このように row_linkage/col_linkage を指定すると、独自の距離指標やカスタムなクラスタリング結果を反映したヒートマップを作成でき、大規模データでは計算時間の削減にも役立ちます。
-
Matplotlibでカラーバー付き2D行列をPythonでプロットする方法
Pythonでカラーバー付きの2D行列をプロットするには、numpyを使って2次元配列(行列)を作成し、そのデータをimshow()メソッドに渡すのが最も簡単な方法です。手順numpyを使用して data2D という2次元配列を作成します。imshow() メソッドを使い、データを画像として(2次元の正規ラスタ上に)表示します。colorbar() メソッドに imshow() が返す ScalarMappable インスタンスを渡し、カラーバーを作成します。これにより、色と数値の対応関係がひと目でわかるようになります。図を表示するには、show() メソッドを使用します。コード例import
-
Matplotlibでpcolormeshをアニメーション化する方法【コード例付き解説】
Matplotlibでpcolormesh(擬似カラープロット)をアニメーション化する方法を、具体的な手順とサンプルコード付きで解説します。 アニメーション化の基本的な流れ pcolormeshをアニメーションさせるには、以下の手順に従います。 figureオブジェクトとサブプロットを作成する numpyを使ってx、y、tのデータポイントを生成する meshgrid関数で座標ベクトルから座標行列(X3、Y3、T3)を作成する pcolormesh()メソッドを使って、不規則な矩形グリッド上に擬似カラープロットを描画する カラーバーをfigureに追加する FuncAnimationクラスを使