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

2つのMatplotlib imshowプロットを同じカラーマップスケールに統一する方法

Matplotlibのimshow()で複数のヒートマップを並べて表示すると、各プロットがそれぞれ独立した色スケールを持つため、見た目の比較が困難になります。そこで、両方のデータから共通の最小値・最大値を求め、vminvmax引数に指定することで、2つのプロットを同一のカラーマップスケールに統一できます。

手順

  • 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
  • NumPyを使って2つのデータ行列 d1d2 を作成します。
  • 両方の行列を1つにまとめた配列を作成し、全体の最大値と最小値を取得します。
  • 最小値には np.amin()、最大値には np.amax() メソッドを使用します。
  • plt.figure() で新しい図を作成(または既存の図をアクティブ化)します。
  • fig.add_subplot() を使い、nrows=1、ncols=2 のサブプロット配置のインデックス1にAxesを追加します。
  • imshow() メソッドに vminvmax を渡すことで、カラーマップがカバーするデータ範囲を明示的に定義します。
  • 手順6と7を2つ目のデータに対しても繰り返します。
  • 最後に plt.show() メソッドで図を表示します。

コード例

import numpy as np
from matplotlib import pyplot as plt

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

# ランダムなデータを2つ作成
data1 = np.random.randn(4, 4)
data2 = np.random.randn(4, 4)

# 両方のデータをまとめて、共通の最小値・最大値を求める
resultant = np.array([data1, data2])
min_val, max_val = np.amin(resultant), np.amax(resultant)

fig = plt.figure()

# 1つ目のプロット(vmin / vmax でスケールを統一)
ax = fig.add_subplot(1, 2, 1)
ax.imshow(data1, cmap="plasma", vmin=min_val, vmax=max_val)

# 2つ目のプロット(同じ vmin / vmax を使用)
ax2 = fig.add_subplot(1, 2, 2)
ax2.imshow(data2, cmap="plasma", vmin=min_val, vmax=max_val)

plt.show()

出力

2つのMatplotlib imshowプロットを同じカラーマップスケールに統一する方法2つのMatplotlib imshowプロットを同じカラーマップスケールに統一する方法

ポイント解説

vminvmax を指定しない場合、imshow() は各配列ごとに独立して色の範囲を自動計算するため、同じ値でも異なる色にマッピングされる可能性があります。上記のように両データを結合した配列に対して np.amin()np.amax() を適用すれば、2つのプロットが完全に同じ色基準で描画され、視覚的な比較が正確に行えます。

さらに、fig.colorbar() を使って共通のカラーバーを追加すると、どの色がどの数値に対応するかも一目でわかるようになり、より読みやすい図になります。

  1. Matplotlibのplt.show()とcv2.imshow()の違いとは?画像表示の差をわかりやすく解説

    Pythonで画像を扱う際、MatplotlibとOpenCV(cv2)はどちらも画像を多次元のNumPy配列として読み込みます。しかし、両者には重要な違いがあります。Matplotlibのimreadメソッドは画像を赤(R)・緑(G)・青(B)の順(RGB順)のNumPy配列として読み込み、imshowで画面に表示します。一方、OpenCVのcv2.imreadも同様に多次元NumPy配列として画像を読み込みますが、チャンネルの並びが逆順(BGR順)になっている点が最大の特徴です。この違いを理解せずに使うと、cv2で読み込んだ画像をMatplotlibで表示した際に色が反転して見えるという現

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

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