【问题标题】:Matplotlib contour plot using specific data points from a set使用一组特定数据点的 Matplotlib 等高线图
【发布时间】:2018-12-10 16:16:39
【问题描述】:

对于繁琐的标题非常抱歉,但我没有找到表达清楚的方式。我应该在这里完成的任务是,给定三个包含坐标矩阵 (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)。我想到了cmapset_underset_over 方法,但似乎不是这样。有什么建议可以解决这个问题吗?非常感谢您。

【问题讨论】:

    标签: python numpy matplotlib contour


    【解决方案1】:

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

    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)
    

    【讨论】:

      猜你喜欢
      • 2011-03-02
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多