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

Matplotlibのimshowで2つの異なるカラーマップを1つの図に表示する方法

Matplotlibのimshow()を使って、正の値と負の値に対してそれぞれ異なるカラーマップを適用し、1つの図に同時に表示する方法を解説します。マスク配列(masked array)を活用することで、値の符号に応じて色分けを切り替えることができます。

実装の手順

  • 図のサイズを設定し、サブプロット間および周囲の余白を調整します。
  • 5×5の2次元配列(ランダムな整数値)を作成します。
  • 負の値のみを含むdata1と、正の値のみを含むdata2という2つのマスク配列を作成します。
  • 図とサブプロットを作成します。
  • imshow()メソッドを使い、data1data2を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)が並んで表示されます。

  1. MatplotlibでLaTeX出力と同じフォントを表示する方法

    MatplotlibのグラフでLaTeX風フォントを使用する方法Matplotlibでグラフを作成する際、軸ラベルやタイトルをLaTeXと同じ数式フォントで表示したいケースは多くあります。LaTeX形式($...$ で囲まれた記法)を使えば、数式を美しく描画できます。ここでは、sin関数のカーブをLaTeX表記でプロットし、タイトルにカスタムフォントを適用する手順を紹介します。実装の手順NumPyを使って x 軸のデータポイントを作成します。y = sin(x) に基づいて y 軸のデータポイントを作成します。LaTeX表記(r$\sin (x)$)を使用して、x と y の曲線をプロットしま

  2. Matplotlibで2つのヒストグラムのビン幅を揃える方法

    Matplotlibで2つのヒストグラムを比較する際、ビン幅が異なると正確な比較ができません。そこで、データセット全体から共通のビン境界を計算することで、両方のヒストグラムのビン幅を揃えることができます。手順ランダムデータ a と、正規分布に基づくデータ b を作成します。共通のビン幅を定義するための変数 bins を初期化します。hist() メソッドを使って、a と共通ビンでヒストグラムを描画します。hist() メソッドを使って、b と同じ共通ビンでヒストグラムを描画します。図を表示するには show() メソッドを使用します。サンプルコードimport numpy as np from