注意
转到末尾 下载完整的示例代码。
pcolormesh 网格和阴影#
axes.Axes.pcolormesh
和 pcolor
提供了几种选项,用于如何布局网格以及网格点之间的阴影。
通常,如果 Z 的形状为 (M, N),则网格 X 和 Y 可以指定为形状 (M+1, N+1) 或 (M, N),具体取决于 shading
关键字参数的参数。请注意,在下面我们指定向量 x 的长度为 N 或 N+1,y 的长度为 M 或 M+1,pcolormesh
会从输入向量内部生成网格矩阵 X 和 Y。
import matplotlib.pyplot as plt
import numpy as np
平面阴影#
网格规范中最少假设的是 shading='flat'
,如果网格在每个维度上比数据大一个,即形状为 (M+1, N+1)。在这种情况下,X 和 Y 指定了用 Z 中的值着色的四边形的角点。这里,我们用 X 和 Y 指定了 (3, 5) 四边形的边缘,它们是 (4, 6)。
nrows = 3
ncols = 5
Z = np.arange(nrows * ncols).reshape(nrows, ncols)
x = np.arange(ncols + 1)
y = np.arange(nrows + 1)
fig, ax = plt.subplots()
ax.pcolormesh(x, y, Z, shading='flat', vmin=Z.min(), vmax=Z.max())
def _annotate(ax, x, y, title):
# this all gets repeated below:
X, Y = np.meshgrid(x, y)
ax.plot(X.flat, Y.flat, 'o', color='m')
ax.set_xlim(-0.7, 5.2)
ax.set_ylim(-0.7, 3.2)
ax.set_title(title)
_annotate(ax, x, y, "shading='flat'")
平面阴影,相同形状的网格#
然而,通常数据是在 X 和 Y 与 Z 的形状匹配的情况下提供的。虽然这对其他 shading
类型很有意义,但当 shading='flat'
时不允许这样做。在历史上,Matplotlib 会在这种情况下静默地删除 Z 的最后一行和最后一列,以匹配 Matlab 的行为。如果仍然需要这种行为,只需手动删除最后一行和最后一列即可
最近邻阴影,相同形状的网格#
通常,当 X、Y 和 Z 都具有相同的形状时,删除一行和一列数据并不是用户想要的。对于这种情况,Matplotlib 允许使用 shading='nearest'
,并将着色的四边形居中在网格点上。
如果使用 shading='nearest'
传递了形状不正确的网格,则会引发错误。
自动阴影#
用户可能希望代码自动选择要使用哪个,在这种情况下 shading='auto'
会根据 X、Y 和 Z 的形状来决定是使用 'flat' 还是 'nearest' 阴影。
fig, axs = plt.subplots(2, 1, layout='constrained')
ax = axs[0]
x = np.arange(ncols)
y = np.arange(nrows)
ax.pcolormesh(x, y, Z, shading='auto', vmin=Z.min(), vmax=Z.max())
_annotate(ax, x, y, "shading='auto'; X, Y, Z: same shape (nearest)")
ax = axs[1]
x = np.arange(ncols + 1)
y = np.arange(nrows + 1)
ax.pcolormesh(x, y, Z, shading='auto', vmin=Z.min(), vmax=Z.max())
_annotate(ax, x, y, "shading='auto'; X, Y one larger than Z (flat)")
Gouraud 阴影#
Gouraud 阴影 也可以指定,其中四边形中的颜色在网格点之间线性插值。X、Y、Z 的形状必须相同。
脚本总运行时间:(0 分钟 2.469 秒)