目次
概要
matplotlib の pcolormesh でメッシュを描画する方法を解説します。
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()
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
に指定した各メッシュの色で塗りつぶされます。
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"
を指定した場合、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()
コメント