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

Matplotlibでcontourfをプロットし、カラーバーを対数スケールにする方法

Matplotlibでcontourfを対数スケールでプロットする手順

Matplotlibのcontourf()を使って塗りつぶし等高線図を描画し、カラーバー(カラースケール)を対数スケールで表示するには、以下の手順に従います。

  • plt.rcParamsで図のサイズを設定し、サブプロット間および周囲の余白(パディング)を自動調整します。
  • サンプルデータの個数を表す変数Nを初期化します。
  • NumPyを使ってx、y、X、Y、Z1、Z2、zの各データ点を生成します。
  • ma.masked_where()で0以下の値をマスクします(対数スケールは0や負の値を扱えないため)。
  • plt.subplots()で図とサブプロットを作成します。
  • contourf()メソッドで等高線をプロットし、ticker.LogLocator()を指定して対数目盛りを適用します。
  • fig.colorbar()でスカラーマップに対応するカラーバーを作成します。
  • show()メソッドで図を表示します。

コード例

import matplotlib.pyplot as plt
import numpy as np
from numpy import ma
from matplotlib import ticker, cm

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

N = 100
x = np.linspace(-3.0, 3.0, N)
y = np.linspace(-2.0, 2.0, N)

X, Y = np.meshgrid(x, y)

Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X * 10)**2 - (Y * 10)**2)

z = Z1 + 50 * Z2
z[:5, :5] = -1
z = ma.masked_where(z <= 0, z)
fig, ax = plt.subplots()

cs = ax.contourf(X, Y, z, locator=ticker.LogLocator(), cmap=cm.PuBu_r)
cbar = fig.colorbar(cs)

plt.show()

ポイント解説

ticker.LogLocator()は、カラーバーの目盛りを10のべき乗(1、10、100…など)のような対数間隔で配置するためのロケーターです。これにより、値の範囲が広いデータでも見やすいカラースケールになります。

また、z = ma.masked_where(z <= 0, z)の行では、0以下の値をマスク配列として除外しています。対数スケールでは0や負の値を扱うことができないため、この処理が重要になります。

実行結果

上記のコードを実行すると、対数スケールのカラーバーを持つ塗りつぶし等高線図が表示されます。中心部の鋭いピークと緩やかな裾の両方が、ひとつの図の中でバランスよく可視化されます。

Matplotlibでcontourfをプロットし、カラーバーを対数スケールにする方法

  1. MatplotlibでNaN値を含むデータをプロット・操作する方法を解説

    MatplotlibでNaN値をプロット・操作する手順 Matplotlibでは、NaN(欠損値)を含むデータもそのまま可視化できます。基本的な流れは以下の3ステップです。 NumPyを使って、NaN値をいくつか含むデータ(配列)を作成します。 imshow()メソッドを使用し、カラーマップとステップ1で作成したデータを指定して、2次元の正規ラスタ上に画像として表示します。デフォルトでは、NaNの部分は自動的に空白(マスクされた領域)として描画されます。 作成した図を画面に表示するには、show()メソッドを呼び出します。 コード例 import numpy as np from matp

  2. Matplotlibで折れ線グラフをアニメーション化する方法を徹底解説

    Matplotlibでは、FuncAnimationを活用することで、折れ線グラフに動きのあるアニメーション効果を簡単に加えることができます。本記事では、基本的な手順と実際に動作するサンプルコードを交えながら、その方法をわかりやすく解説します。折れ線グラフをアニメーション化する基本手順subplots()メソッドを使用して、図(figure)とサブプロットを作成します。x軸・y軸それぞれの表示範囲(スケール)を設定します。NumPyを使って、xおよびtのデータ点を生成します。座標ベクトルからmeshgrid()で座標行列X2とT2を作成します。plot()メソッドでxとFのデータを使い、折れ線