使用一组特定数据点的 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_under
和set_over
想了想,但好像不是这个方法。关于这个问题有什么建议吗?非常感谢您。
有几种方法可以达到预期的效果:
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
参数一起使用。
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)
很抱歉标题很繁琐,但我找不到表达清楚的方法。我在这里应该完成的任务是,给定三个包含坐标矩阵 (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_under
和set_over
想了想,但好像不是这个方法。关于这个问题有什么建议吗?非常感谢您。
有几种方法可以达到预期的效果:
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
参数一起使用。
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)