使用一组特定数据点的 Matplotlib 等高线图

Matplotlib contour plot using specific data points from a set

很抱歉标题很繁琐,但我找不到表达清楚的方法。我在这里应该完成的任务是,给定三个包含坐标矩阵 (X, Y) 的 numpy 数组和该网格 (Z) 中实函数的求值;获得数据的等高线图。然而,一些坐标让位于不可接受的 Z 值,不应在图中考虑。到目前为止我做了什么:

cmap = plt.cm.get_cmap("winter")
cmap.set_under("magenta")
cmap.set_over("yellow")

with PdfPages('myplot.pdf') as pdf:
     fig = plt.figure()
     CS = plt.contourf(X, Y, Z, cmap=cmap)
     cbar = plt.colorbar(CS)
     cbar.ax.set_ylabel('Z')
     plt.xlabel('X (\AA)')
     plt.ylabel('Y (\AA)')
     plt.tight_layout()
     pdf.savefig(fig)

但是,我找不到适当的方法来限制绘图中应考虑的值(类似于 Zmin < Z < Zmax)。 cmap的方法set_underset_over想了想,但好像不是这个方法。关于这个问题有什么建议吗?非常感谢您。

有几种方法可以达到预期的效果:

1) 如下所示直接限制 Z 值,然后绘制结果数组:

Z2 = Z.copy()
Z2[Z<Zmin] = Zmin
Z2[Z>Zmax] = Zmax
CS = plt.contourf(X, Y, Z2, cmap=cmap)

2) 使用 vminvmax 参数重新缩放颜色条:

CS = plt.contourf(X, Y, Z, cmap=cmap, vmin=Zmin, vmax=Zmax)

编辑:

误读了您的问题/意图。如果要标记超出范围的值, 然后要么将它们设置为 NaN(在这种情况下相应的位置将为白色),要么将 set_under / set_over 方法与 vminvmax 参数一起使用。

1) 将超出范围的值设置为 NaN:

Z2 = Z.copy()
Z2[Z<Zmin] = np.nan
Z2[Z>Zmax] = np.nan
CS = plt.contourf(X, Y, Z2, cmap=cmap)

2) set_underset_over,然后使用 vminvmax 参数设置限制:

cmap.set_under("magenta")
cmap.set_over("yellow")
CS = plt.contourf(X, Y, Z, cmap=cmap, vmin=Zmin, vmax=Zmax)