Warning: Undefined variable $position in /home/pystyles/pystyle.info/public_html/wp/wp-content/themes/lionblog/functions.php on line 4897

matplotlib – contour で等高線を描画する方法

matplotlib – contour で等高線を描画する方法

概要

contour() で等高線を描画する方法について解説します。

Advertisement

matplotlib.pyplot.contour

matplotlib.pyplot.contour(*args, data=None, **kwargs)
引数
名前 デフォルト値
X, Y array-like
x, y 座標
Z array-like (N, M)
z 座標
levels int or array-like
等高線の数または等高線を引く位置

返り値
名前 説明
QuadContourSet 描画したものを表すオブジェクト

X, Y, Z の指定方法

  • X, Y: xy 座標を表す (N, M) の2次元配列
  • Z: 各座標に対応する値をそれぞれ (N, M) の2次元配列
In [1]:
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D


def f(x, y):
    return x ** 2 + y ** 2 + x * y


X, Y = np.mgrid[-3:3:100j, -3:3:100j]
Z = f(X, Y)

fig = plt.figure(figsize=(9, 4))

# 等高線を作成する。
ax1 = fig.add_subplot(121)
ax1.set_title("contour")
ax1.contour(X, Y, Z)

# 3D グラフを作成する。
ax2 = fig.add_subplot(122, projection="3d")
ax2.set_title("surface")
ax2.plot_surface(X, Y, Z)

plt.show()
  • X: x 座標を表す (N,) の1次元配列
  • Y: y 座標を表す (M,) の1次元配列
  • Z: 各座標に対応する値をそれぞれ (N, M) の2次元配列
In [2]:
x = np.linspace(-3, 3, 100)
y = np.linspace(-3, 3, 100)

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

fig = plt.figure(figsize=(9, 4))

# 等高線を作成する。
ax1 = fig.add_subplot(121)
ax1.set_title("contour")
ax1.contour(x, y, Z)

# 3D グラフを作成する。
ax2 = fig.add_subplot(122, projection="3d")
ax2.set_title("surface")
ax2.plot_surface(X, Y, Z)

plt.show()

levels – 等高線の間隔を指定する

levels 引数で等高線の間隔を指定できます。 整数を指定した場合は、描画範囲を levels 段階に分けるように等高線を作成します。

In [3]:
fig, ax = plt.subplots(figsize=(5, 5))
ax.contour(X, Y, Z, levels=5)
plt.show()

リストを指定した場合、Z がその値をとる点を結ぶように等高線を作成します。

In [4]:
# f(x, y) = 0, 5, 10, 15, 30 となる等高線を作成する。
fig, ax = plt.subplots(figsize=(5, 5))
ax.contour(X, Y, Z, levels=[0, 5, 10, 15, 30])

plt.show()

colors – 色を指定する

In [5]:
fig, ax = plt.subplots(figsize=(5, 5))
ax.contour(X, Y, Z, levels=5, colors="g")

plt.show()

リストを指定した場合、内側から順に指定した色が使用されます。

In [6]:
fig, ax = plt.subplots(figsize=(5, 5))
ax.contour(X, Y, Z, levels=5, colors=["red", "blue", "green", "pink", "yellow"])

plt.show()
Advertisement

カラーマップを指定する

cmap 引数で値に応じて色を変化させるカラーマップを設定できます。

In [7]:
fig, ax = plt.subplots(figsize=(5, 5))
ax.contour(X, Y, Z, levels=5, cmap="magma")

plt.show()

alpha – 透過度を設定する

alpha 引数に $[0, 1]$ の範囲の浮動小数点数を指定することで透過度を設定できます。

In [8]:
fig, ax = plt.subplots(figsize=(5, 5))
ax.contour(X, Y, Z, alpha=0.8)

plt.show()

linewidths – 線の太さを指定する

In [9]:
fig, ax = plt.subplots(figsize=(5, 5))
ax.contour(X, Y, Z, linewidths=3)

plt.show()

linestyles – 線のスタイルを指定する

In [10]:
fig, ax = plt.subplots(figsize=(5, 5))
ax.contour(X, Y, Z, linestyles=["-", "--", "-", "--", "-"])

plt.show()
In [11]:
##