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

Matplotlibでヒートマップの上三角・下三角のみを表示する方法

Matplotlibでヒートマップの上三角または下三角だけを描画したい場合、NumPyのマスク配列(masked array)を活用するのが便利です。不要な部分をマスクして画像として表示することで、相関行列などでよく見られる三角形のヒートマップを簡単に作成できます。

実装の手順

  • 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。

  • 5×5のランダムなデータを作成します。

  • numpy.tri() メソッドを使い、指定した対角線以下に1、それ以外に0を持つ配列を生成します。これがマスクの元になります。

  • 生成したマスクを使って、np.ma.array() でマスク済みの2次元配列を作成します。マスクされた要素は表示されなくなります。

  • imshow() メソッドでデータを画像として2次元ラスタ上に表示します。

  • show() メソッドで図を画面に表示します。

コード例

import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
data = np.random.rand(5, 5)
mask = np.tri(data.shape[0], k=-1)
data = np.ma.array(data, mask=mask)
plt.imshow(data, interpolation="nearest", cmap='copper')
plt.show()

ポイント解説

np.tri(N, k=-1) は、対角線より1つ下まで1を埋め、それより上を0とする下三角行列を返します。k引数の値を変更すれば、マスクされる範囲を細かく制御できます。例えば k=0 にすると対角成分も含めてマスクされ、k=1 ならさらに広い範囲が隠れます。

また、上三角のみを表示したい場合は、numpy.triu() を使うか、マスクを反転させることで対応できます。相関行列の可視化では、対称性があるため片側の三角形だけを表示することで、図がすっきりし読みやすくなるというメリットがあります。

出力結果

Matplotlibでヒートマップの上三角・下三角のみを表示する方法

このコードを実行すると、下三角部分だけがカラーマップ「copper」で色付けされ、上三角は空白になったヒートマップが表示されます。interpolation="nearest" を指定することで、各セルがぼやけずにくっきりとした境界で描画されます。

  1. PythonのMatplotlibで球の表面に点をプロットする方法

    Pythonで球の表面に点をプロットしたい場合、Matplotlibのplot_surface()メソッドを利用すると簡単に実現できます。この記事では、3D球面を描画し、その上にデータポイントを表示する手順を具体的なコード例とともに解説します。実装の手順figure()メソッドを使って、新しい図を作成するか、既存の図をアクティブにします。add_subplot()メソッドにprojection=3dを指定して、3D投影のサブプロットを追加します。球の半径を表す変数rを初期化します。NumPyを使用して、球面上のtheta(θ)の値と、x・y・z各軸のデータポイントを算出します。plot_sur

  2. PythonのMatplotlibでX軸に日付をプロットする方法

    Pythonで時系列データを可視化する際、X軸に日付を表示したいケースはよくあります。PandasとMatplotlibを組み合わせれば、日付をインデックスとしたデータフレームを作成し、gcf().autofmt_xdate()を使うことでX軸の日付表示を自動的に整形できます。実装の手順日付文字列のリストを作成し、pd.to_datetime()を使ってdatetime型に変換します。プロットするデータとして data = [1, 2, 3] を用意します。DataFrame() オブジェクト(ここではDF)を生成します。DFの value 列に手順2のデータを設定します。手順1で作成したda