Matplotlibのimshowで2つの異なるカラーマップを1つの図に表示する方法
Matplotlibのimshow()を使って、正の値と負の値に対してそれぞれ異なるカラーマップを適用し、1つの図に同時に表示する方法を解説します。マスク配列(masked array)を活用することで、値の符号に応じて色分けを切り替えることができます。
実装の手順
- 図のサイズを設定し、サブプロット間および周囲の余白を調整します。
- 5×5の2次元配列(ランダムな整数値)を作成します。
- 負の値のみを含むdata1と、正の値のみを含むdata2という2つのマスク配列を作成します。
- 図とサブプロットを作成します。
imshow()メソッドを使い、data1とdata2を2Dラスター画像として表示します。このとき、それぞれ異なるカラーマップを指定します。colorbar()メソッドを使って、2つの異なるカラーバーを作成します。- 両方の画像に対してカラーバーを設定します。
- 各カラーバーにラベルを設定します。
show()メソッドで図を表示します。
サンプルコード
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
img = np.random.randint(-10, 10, (5, 5))
data1 = np.ma.masked_array(img, img >= 0)
data2 = np.ma.masked_array(img, img < 0)
fig, ax = plt.subplots()
img1 = ax.imshow(data1, cmap="prism_r")
img2 = ax.imshow(data2, cmap="copper")
bar1 = plt.colorbar(img1)
bar2 = plt.colorbar(img2)
bar1.set_label('ColorBar 1')
bar2.set_label('ColorBar 2')
plt.show()コードのポイント
np.ma.masked_arrayを使用すると、条件に合致する要素をマスク(非表示)できます。ここでは「0以上の値」をマスクしたdata1(負の値のみ有効)と、「0未満の値」をマスクしたdata2(正の値のみ有効)を作成しています。これにより、同じ座標上に2つのimshow()を重ねて描画しても、互いに干渉せず異なるカラーマップが適用されます。
出力結果
実行すると、負の値には「prism_r」カラーマップ、正の値には「copper」カラーマップが適用されたヒートマップが1つの図に表示され、右側に2つのカラーバー(ColorBar 1・ColorBar 2)が並んで表示されます。
-
MatplotlibでLaTeX出力と同じフォントを表示する方法
MatplotlibのグラフでLaTeX風フォントを使用する方法Matplotlibでグラフを作成する際、軸ラベルやタイトルをLaTeXと同じ数式フォントで表示したいケースは多くあります。LaTeX形式($...$ で囲まれた記法)を使えば、数式を美しく描画できます。ここでは、sin関数のカーブをLaTeX表記でプロットし、タイトルにカスタムフォントを適用する手順を紹介します。実装の手順NumPyを使って x 軸のデータポイントを作成します。y = sin(x) に基づいて y 軸のデータポイントを作成します。LaTeX表記(r$\sin (x)$)を使用して、x と y の曲線をプロットしま
-
Matplotlibで2つのヒストグラムのビン幅を揃える方法
Matplotlibで2つのヒストグラムを比較する際、ビン幅が異なると正確な比較ができません。そこで、データセット全体から共通のビン境界を計算することで、両方のヒストグラムのビン幅を揃えることができます。手順ランダムデータ a と、正規分布に基づくデータ b を作成します。共通のビン幅を定義するための変数 bins を初期化します。hist() メソッドを使って、a と共通ビンでヒストグラムを描画します。hist() メソッドを使って、b と同じ共通ビンでヒストグラムを描画します。図を表示するには show() メソッドを使用します。サンプルコードimport numpy as np from