对于很麻烦的标题,我感到很抱歉,但是我找不到一种清晰表达它的方法。我应该在这里完成的任务是,给定三个包含坐标矩阵(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_over
和cmap
,但似乎不是这样。有什么建议可以解决这个问题吗?预先非常感谢。
答案 0 :(得分:2)
有几种方法可以达到预期的效果:
1)直接按如下所示将Z值设置为上限,然后绘制结果数组:
Z2 = Z.copy()
Z2[Z<Zmin] = Zmin
Z2[Z>Zmax] = Zmax
CS = plt.contourf(X, Y, Z2, cmap=cmap)
2)使用vmin
和vmax
参数重新调整颜色栏:
CS = plt.contourf(X, Y, Z, cmap=cmap, vmin=Zmin, vmax=Zmax)
误读了您的问题/意图。如果您要标记超出范围的值,
然后将其设置为NaN(在这种情况下,对应的位置将为白色),或者将set_under
/ set_over
方法与vmin
和vmax
参数一起使用。 / 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_under
和set_over
,然后使用vmin
和vmax
参数设置限制:
cmap.set_under("magenta")
cmap.set_over("yellow")
CS = plt.contourf(X, Y, Z, cmap=cmap, vmin=Zmin, vmax=Zmax)