Matplotlib使用a s中的特定数据点绘制等高线图

2024-04-24 06:46:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我很抱歉这个冗长的标题,但我找不到一个清晰的表达方式。我在这里要完成的任务是,给定三个包含坐标矩阵(X,Y)的数组,以及在这个网格(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和{}的方法,但似乎不是这样。关于这个问题有什么建议吗?事先非常感谢。在


Tags: 方法绘图标题pdffigplt矩阵cs
1条回答
网友
1楼 · 发布于 2024-04-24 06:46:43

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

1)直接按如下方式对Z值加上上限,然后绘制结果数组:

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

2)使用vminvmax参数重新缩放colorbar:

^{pr2}$

编辑:

误解了你的问题/意图。如果要标记超出范围的值, 然后将它们设置为NaNs(在这种情况下,相应的位置将为白色),或者使用set_under/set_over方法和vmin和{}参数。在

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

^{3}$

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)

相关问题 更多 >