matplotlib – contourf で塗りつぶした等高線を描画する方法

目次

概要

contourf() で塗りつぶした等高線を描画する方法について紹介します。

matplotlib.pyplot.contourf

matplotlib.pyplot.contourf(*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.contourf(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.contourf(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.contourf(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.contourf(X, Y, Z, levels=[0, 5, 10, 15, 30])

plt.show()

colors – 色を指定する

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

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

plt.show()

カラーマップを指定する

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

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

plt.show()

alpha – 透過度を設定する

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

In [7]:
fig, ax = plt.subplots(figsize=(6, 6))
ax.contourf(X, Y, Z, alpha=0.8)

plt.show()

hatches – ハッチを設定する

In [8]:
fig, ax = plt.subplots(figsize=(5, 5))
ax.contourf(X, Y, Z, colors="w", hatches=["o", "///", "o", "///", "o"])

plt.show()

コメント

コメントする

目次