2つのMatplotlib imshowプロットを同じカラーマップスケールに統一する方法
Matplotlibのimshow()で複数のヒートマップを並べて表示すると、各プロットがそれぞれ独立した色スケールを持つため、見た目の比較が困難になります。そこで、両方のデータから共通の最小値・最大値を求め、vminとvmax引数に指定することで、2つのプロットを同一のカラーマップスケールに統一できます。
手順
- 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
- NumPyを使って2つのデータ行列 d1 と d2 を作成します。
- 両方の行列を1つにまとめた配列を作成し、全体の最大値と最小値を取得します。
- 最小値には
np.amin()、最大値にはnp.amax()メソッドを使用します。 plt.figure()で新しい図を作成(または既存の図をアクティブ化)します。fig.add_subplot()を使い、nrows=1、ncols=2 のサブプロット配置のインデックス1にAxesを追加します。imshow()メソッドにvminとvmaxを渡すことで、カラーマップがカバーするデータ範囲を明示的に定義します。- 手順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()
出力


ポイント解説
vmin と vmax を指定しない場合、imshow() は各配列ごとに独立して色の範囲を自動計算するため、同じ値でも異なる色にマッピングされる可能性があります。上記のように両データを結合した配列に対して np.amin() と np.amax() を適用すれば、2つのプロットが完全に同じ色基準で描画され、視覚的な比較が正確に行えます。
さらに、fig.colorbar() を使って共通のカラーバーを追加すると、どの色がどの数値に対応するかも一目でわかるようになり、より読みやすい図になります。
-
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で表示した際に色が反転して見えるという現
-
Matplotlibで2つのヒストグラムのビン幅を揃える方法
Matplotlibで2つのヒストグラムを比較する際、ビン幅が異なると正確な比較ができません。そこで、データセット全体から共通のビン境界を計算することで、両方のヒストグラムのビン幅を揃えることができます。手順ランダムデータ a と、正規分布に基づくデータ b を作成します。共通のビン幅を定義するための変数 bins を初期化します。hist() メソッドを使って、a と共通ビンでヒストグラムを描画します。hist() メソッドを使って、b と同じ共通ビンでヒストグラムを描画します。図を表示するには show() メソッドを使用します。サンプルコードimport numpy as np from