[Matplotlib] 等高線の描画

[Matplotlib] 等高線の描画

等高線の描画

 x と y のデータを numpy.meshgrid() に渡すと、xy平面上の格子点 (X, Y) を作成してくれます。1つ1つの格子点 X, Y について高度 Z を与えると、(X, Y, Z) の 3 次元データが完成するので、これをもとに等高線を描くことができます。

matplotlib.axes.Axes.contour()

 (X, Y, Z) を matplotlib.axes.Axes.contour()に渡すと等高線を描くことができます。
 $Z = X^2+Y^2$ の等高線を描いてみましょう。

# PYTHON_MATPLOTLIB_CONTOUR_01

import numpy as np
import matplotlib.pyplot as plt

# Figureを作成
fig = plt.figure(figsize = (5, 5))

# FigureにAxesを追加
ax = fig.add_subplot(111)

# 軸ラベルを設定
ax.set_xlabel("x", size = 14)
ax.set_ylabel("y", size = 14)

# 軸の範囲を設定
ax.set_xlim(-5, 5)
ax.set_ylim(-5, 5)

# 分割数
n = 128

# 範囲-5~5をn分割して(x,y)データを作成
x = np.linspace(-5, 5, n)
y = np.linspace(-5, 5, n)

# 格子点の作成
X, Y = np.meshgrid(x, y)

# 高度の計算式
Z = X**2 + Y**2

# 等高線を描く高度
h = [2, 6, 10, 14, 18]

# 等高線をプロット(カラーマップはhsv)
ct = ax.contour(X, Y, Z, cmap = "hsv", levels = h)

# 等高線ラベルを設定
ax.clabel(ct, fontsize = 12)

 Python Axes.contour()で描いた等高線

 contour() の cmap にカラーマップを渡すことができます(指定しなくても自動で色が選択されます)。等高線の本数と間隔は levels に高度のリストを渡して調整します。一般には高度の間隔は一定にしておくことで、等高線が密なところは勾配が急であることがわかります。等高線ラベルは Axes.clabel() で表示します。このメソッドの第 1 引数には Axesオブジェクト(等高線)を渡します。

 linestyles で "solid", "dashed", "dashdot", "dotted" の中から線の種類を選択することもできます。
 

matplotlib.axes.Axes.pcolormesh()

 matplotlib.axes.Axes.pcolormesh() を使うとカラーマップで色分けされた等高線を描くことができます。

# PYTHON_MATPLOTLIB_CONTOUR_02

import numpy as np
import matplotlib.pyplot as plt

# 8×6サイズのFigureを追加
fig = plt.figure(figsize = (8, 6))

# FigureにAxesを追加
ax = fig.add_subplot(111)

# 軸ラベルを設定
ax.set_xlabel("x", size = 14)
ax.set_ylabel("y", size = 14)

# 軸の範囲を設定
ax.set_xlim(-5, 5)
ax.set_ylim(-5, 5)

# 分割数
n = 128

# 範囲-5~5をn分割して(x,y)データを作成
x = np.linspace(-5, 5, n)
y = np.linspace(-5, 5, n)

# 格子点の作成
X, Y = np.meshgrid(x, y)

# 高度の計算式
Z = X**2 + Y**2

# 等高線をプロット(カラーマップはBlues)
im = ax.pcolormesh(X, Y, Z, cmap = "Blues")

# カラーバーを表示
fig.colorbar(im)

 Python Axes.pcolormesh()で描いた等高線

 最後の行で colorbar()メソッドを使って右横にカラーバーを表示させています。
 このメソッドの引数には Axesオブジェクトを渡します。