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

Matplotlibで等高線図のカラーバーに表示範囲(vmin・vmax)を設定する方法

Matplotlibで等高線図(コンタープロット)のカラーバーに表示範囲(下限値・上限値)を設定したい場合、vminvmax を組み合わせて ScalarMappable を使うのが効果的です。この記事では、具体的な手順とサンプルコードをわかりやすく解説します。

カラーバーに範囲を設定する手順

  • 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
  • NumPy を使って x 軸・y 軸のデータポイントを作成します。
  • x と y をもとにデータを生成します。
  • 座標ベクトルから座標行列(メッシュグリッド)を作成します。
  • vminvmax を初期化し、カラーバーの下限・上限を指定します。
  • contourf() メソッドで塗りつぶし等高線を描画します。
  • ScalarMappable を使用して、vminvmax の範囲内でカラーバーを作成します。
  • show() メソッドで図を表示します。

サンプルコード

from matplotlib import pyplot as plt
import numpy as np
from matplotlib.cm import ScalarMappable

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

x = np.arange(20)
y = np.arange(20)

data = x[:, None] + y[None, :]
X, Y = np.meshgrid(x, y)

vmin = 0
vmax = 15

fig, ax = plt.subplots()

qcs = ax.contourf(
    X, Y, data,
    vmin=vmin, vmax=vmax
)

fig.colorbar(
    ScalarMappable(norm=qcs.norm, cmap=qcs.cmap),
    ticks=range(vmin, vmax+5, 5)
)

plt.show()

実行結果

Matplotlibで等高線図のカラーバーに表示範囲(vmin・vmax)を設定する方法

上記のコードを実行すると、0〜15 の範囲に制限されたカラーバーが表示されます。元のデータの最大値は 38 ですが、カラーバーの目盛りは vmin=0 から vmax=15 の間に固定され、5 刻みの目盛りが自動的に配置されます。

この手法のポイントは、fig.colorbar() に等高線オブジェクトを直接渡す代わりに、qcs.normqcs.cmap を利用して ScalarMappable を作成している点です。これにより、等高線図自体の色分けとカラーバーのスケールを一致させたまま、カラーバー単体の表示範囲を自由にコントロールできます。

  1. Matplotlibでhist2dプロットにカラーバーを追加する方法

    Matplotlibのhist2dプロット(2次元ヒストグラム)にカラーバーを追加するには、colorbar()メソッドの引数にスカラーマッピング可能なオブジェクト(ScalarMappable)を渡します。 実装手順 NumPyを使ってxとyのデータポイントを作成します。 subplots()メソッドを使って、図とサブプロットを作成します。 hist2d()メソッドを使って、2次元ヒストグラムを描画します。 hist2dから返されるスカラーマッピングオブジェクトをもとに、colorbar()でカラーバーを作成します。 show()メソッドを使って、図を表示します。 コード例 import

  2. Matplotlibの等高線図に軸線や原点を描画する方法

    Matplotlibで等高線図を描画する際、グラフ上に軸線や原点(x=0、y=0)を明示したいケースがあります。本記事では、contourf()メソッドで等高線図を作成し、axhline()でy=0の水平線、axvline()でx=0の垂直線を重ねて描画する方法を解説します。 実装の手順 numpyを使用して、x、y、zのデータポイントを作成します。 plt.axis(off)メソッドを使って、デフォルトの軸を非表示に設定します。 contourf()メソッドにx、y、zのデータポイントを渡して、塗りつぶし等高線図を描画します。 x=0とy=0の線を赤色でプロットします。 show()メソッ