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

matplotlib – pcolormesh でメッシュを描画する方法

matplotlib – pcolormesh でメッシュを描画する方法

概要

matplotlib の pcolormesh でメッシュを描画する方法を解説します。

Advertisement

matplotlib.pyplot.pcolormesh

matplotlib.pyplot.pcolormesh(*args, alpha=None, norm=None, cmap=None, vmin=None, vmax=None, shading='flat', antialiased=False, data=None, **kwargs)
引数
名前 デフォルト値
C array-like
2次元の配列。カラーマップにより、この値が色に変換されます。
X, Y array-like
四角形の四隅の座標。
cmap str or Colormap None
Colormap オブジェクトまたは登録されたカラーマップの名前。カラーマップは、C の値を色に変換します。None の場合、rcParams[“image.cmap”] (“viridis”)。
norm Normalize None
Normalize オブジェクトは、C の値をカラーマップの範囲 [0, 1] に正規化します。
vmin, vmax scalar
カラーバーの範囲を指定します。
edgecolors {‘none’, None, ‘face’, color, color sequence}
メッシュの枠線の色。None の場合、rcParams[“patch.edgecolor”] (black)。
alpha scalar None
透過度を [0, 1] の範囲で指定します。None の場合、1 (透過なし)。
shading {‘flat’, ‘gouraud’} ‘flat’
メッシュの塗りつぶし方法を指定します。
snap bool
メッシュをピクセル境界にスナップするかどうかを指定します。

X, Y, C の指定方法

C にメッシュの値、X にメッシュの四隅の $x$ 座標、Y にメッシュの四隅の $y$ 座標を指定します。 指定方法は次の3種類があります。

  • X, Y を形状が (M, N) の2次元配列、C を形状が (M – 1, N – 1) の2次元配列で指定する

この場合、各メッシュの情報は以下のように解釈されます。

In [1]:
import matplotlib.pyplot as plt
import numpy as np


X, Y = np.mgrid[:5, :6]
C = np.array(
    [[0, 1, 2, 3, 4],
     [5, 6, 7, 8, 9],
     [10, 11, 12, 13, 14],
     [15, 16, 17, 18, 19]]
)
print(f"X: shape={X.shape}", X, sep="\n")
print(f"Y: shape={Y.shape}", Y, sep="\n")
print(f"C: shape={C.shape}", C, sep="\n")

fig, ax = plt.subplots(figsize=(5, 5))
ax.pcolormesh(X, Y, C)

plt.show()
X: shape=(5, 6)
[[0 0 0 0 0 0]
 [1 1 1 1 1 1]
 [2 2 2 2 2 2]
 [3 3 3 3 3 3]
 [4 4 4 4 4 4]]
Y: shape=(5, 6)
[[0 1 2 3 4 5]
 [0 1 2 3 4 5]
 [0 1 2 3 4 5]
 [0 1 2 3 4 5]
 [0 1 2 3 4 5]]
C: shape=(4, 5)
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]
  • X, Y, C を形状が (M, N) の2次元配列で指定する

この場合、C の最後の行、列は無視されます。

In [2]:
X, Y = np.mgrid[:5, :5]
C = np.array(
    [
        [0, 1, 2, 3, 4],
        [5, 6, 7, 8, 9],
        [10, 11, 12, 13, 14],
        [15, 16, 17, 18, 19],
        [20, 21, 22, 23, 24],
    ]
)
# C[:-1, :-1] と一緒

print(f"X: shape={X.shape}", X, sep="\n")
print(f"Y: shape={Y.shape}", Y, sep="\n")
print(f"C: shape={C.shape}", C, sep="\n")

fig, ax = plt.subplots(figsize=(5, 5))
ax.pcolormesh(X, Y, C)

plt.show()
X: shape=(5, 5)
[[0 0 0 0 0]
 [1 1 1 1 1]
 [2 2 2 2 2]
 [3 3 3 3 3]
 [4 4 4 4 4]]
Y: shape=(5, 5)
[[0 1 2 3 4]
 [0 1 2 3 4]
 [0 1 2 3 4]
 [0 1 2 3 4]
 [0 1 2 3 4]]
C: shape=(5, 5)
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]
 [20 21 22 23 24]]
  • X を形状が (N,) の1次元配列、Y を形状が (M,) の1次元配列、C を形状が (M – 1, N – 1) の2次元配列で指定する

この場合、X, Y に指定した1次元配列から各メッシュの四隅の座標が生成されます。

In [3]:
X = np.arange(6)
Y = np.arange(5)
C = np.array(
    [
        [0, 1, 2, 3, 4],
        [5, 6, 7, 8, 9],
        [10, 11, 12, 13, 14],
        [15, 16, 17, 18, 19],
    ]
)
# C[:-1, :-1] と一緒

print(f"X: shape={X.shape}", X, sep="\n")
print(f"Y: shape={Y.shape}", Y, sep="\n")
print(f"C: shape={C.shape}", C, sep="\n")

fig, ax = plt.subplots(figsize=(5, 5))
ax.pcolormesh(X, Y, C)

plt.show()
X: shape=(6,)
[0 1 2 3 4 5]
Y: shape=(5,)
[0 1 2 3 4]
C: shape=(4, 5)
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]

cmap – カラーマップを設定する

cmap で適用するカラーマップを指定します。

In [4]:
X, Y = np.mgrid[:5, :6]
C = np.array(
    [[0, 1, 2, 3, 4],
     [5, 6, 7, 8, 9],
     [10, 11, 12, 13, 14],
     [15, 16, 17, 18, 19]]
)

fig, ax = plt.subplots(figsize=(5, 5))
ax.pcolormesh(X, Y, C, cmap="magma")

plt.show()

edgecolors – メッシュの枠線の色を設定する

edgecolors でメッシュの枠線の色を指定します。

  • “none”: 枠線なし
  • “face”: メッシュの色と同じ色
  • Color: 単一の色
In [5]:
X, Y = np.mgrid[:5, :6]
C = np.array(
    [[0, 1, 2, 3, 4],
     [5, 6, 7, 8, 9],
     [10, 11, 12, 13, 14],
     [15, 16, 17, 18, 19]]
)

fig, ax = plt.subplots(figsize=(5, 5))
ax.pcolormesh(X, Y, Z, edgecolors="w")
plt.show()
Advertisement

alpha – 透過度を設定する

alpha でメッシュの透過度を指定します。

In [6]:
X, Y = np.mgrid[:5, :6]
C = np.array(
    [[0, 1, 2, 3, 4],
     [5, 6, 7, 8, 9],
     [10, 11, 12, 13, 14],
     [15, 16, 17, 18, 19]]
)

fig, ax = plt.subplots(figsize=(5, 5))
ax.pcolormesh(X, Y, Z, alpha=0.5)
plt.show()

shading – メッシュの塗りつぶし方法を設定する

shading でメッシュの塗りつぶし方法を指定します。

  • “flat”: 単一の色で設定する

C に指定した各メッシュの色で塗りつぶされます。

shade=”flat”

In [7]:
X, Y = np.mgrid[:5, :6]
C = np.array(
    [[0, 1, 2, 3, 4],
     [5, 6, 7, 8, 9],
     [10, 11, 12, 13, 14],
     [15, 16, 17, 18, 19]]
)

fig, ax = plt.subplots(figsize=(5, 5))
ax.pcolormesh(X, Y, Z, shading="flat")
plt.show()
  • “gouraud”: グーローシェーディングで塗りつぶす

各メッシュはグーローシェーディング (Gouraud shading) で塗りつぶされます。

shade=”gouraud”

shade="gouraud" を指定した場合、C の値は X, Y で指定した各頂点の色を表すので、X, Y, Z はすべて同じ形状でなければなりません。

In [8]:
X, Y = np.mgrid[:5, :5]
C = np.array(
    [
        [0, 1, 2, 3, 4],
        [5, 6, 7, 8, 9],
        [10, 11, 12, 13, 14],
        [15, 16, 17, 18, 19],
        [20, 21, 22, 23, 24],
    ]
)

fig, ax = plt.subplots(figsize=(5, 5))
ax.pcolormesh(X, Y, Z, shading="gouraud")
plt.show()