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

时间:2018-07-02 12:20:36

标签: python numpy matplotlib contour

对于很麻烦的标题,我感到很抱歉,但是我找不到一种清晰表达它的方法。我应该在这里完成的任务是,给定三个包含坐标矩阵(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之类的东西)。我考虑过set_under的方法set_overcmap,但似乎不是这样。有什么建议可以解决这个问题吗?预先非常感谢。

1 个答案:

答案 0 :(得分:2)

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

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参数一起使用。 / p>

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)