Pythonによるデータ分析をする際にグラフなどの可視化でよく利用されるmatplotlibで等高線プロットを描画する方法について解説します。
等高線プロットによる描画方法
matplotlibで等高線をプロットする際のメソッドとしてはcontour, contourfといったメソッドがあります。それぞれの使い方を以降で解説します。
contourによる等高線プロット
等高線をプロットするcontourメソッドは以下の例のように使用します。
import numpy as np import matplotlib.pyplot as plt # データグリッドの生成 x = np.linspace(-10, 10, 50) y = np.linspace(-10, 10, 50) X, Y = np.meshgrid(x, y) # データ点の生成 Z = np.sin(X) + np.cos(Y) # 等高線プロットの表示 plt.contour(X, Y, Z, 20, cmap='RdGy') plt.colorbar() plt.show()
データとしては、X, Y, Zが必要です。X, Yについては描画のためのグリッドで、numpyにnp.meshgridという便利なメソッドがあります。以下のようにx, yをnp.linspace等間隔のデータを作成し、np.meshgrid(x, y)とすることで、グリッドを作成することができます。
# データグリッドの生成 x = np.linspace(-10, 10, 50) y = np.linspace(-10, 10, 50) X, Y = np.meshgrid(x, y)
Zは、Z = f(X, Y)で表されるように各グリッドの点に対する値を表します。fは任意の関数と思ってもらえばよいです。今回の例では、適当に以下のような式でZの値を生成しています。
# データ点の生成 Z = np.sin(X) + np.cos(Y)
等高線プロットを表示するには、用意したX, Y, Zをcontourメソッドに渡します。第4引数に渡しているのは等高線の数に該当する値で、この値を大きくすると等高線の間隔が短い等高線のプロットが生成できます。
contourfによる間隔を埋めた等高線プロット
contourは等高線を表示するメソッドでしたが等高線の間隔を埋めた等高線プロットをする場合には、countourfメソッドを使用します。
import numpy as np import matplotlib.pyplot as plt # データグリッドの生成 x = np.linspace(-10, 10, 50) y = np.linspace(-10, 10, 50) X, Y = np.meshgrid(x, y) # データ点の生成 Z = np.sin(X) + np.cos(Y) # 等高線プロットの表示 plt.contourf(X, Y, Z, 20, cmap='RdGy') plt.colorbar() plt.show()
使用方法は、countorと同じですが、結果の画像を見てみると等高線間が保管されて色の濃淡で分かりやすくなっていることが分かります。
ソースコード
上記で紹介しているソースコードについてはgithubにて公開しています。参考にしていただければと思います。