代码之家  ›  专栏  ›  技术社区  ›  martin

以z为权重的x-y平面上的热图

  •  3
  • martin  · 技术社区  · 7 年前

    我已经在这个论坛上找到了几十个关于热图的答案,但我仍然遇到了问题,所以我想我应该问问自己。请记住,直到一个月前,我还不知道Python是什么。

    所以,我有一个包含三列数据的大文件。前两个是标准的x-y坐标。对于每个点,都有第三个变量z,我想用它作为权重来构建某种热图。

    我见过几种方法,例如使用网格网格或更改数组大小,但我认为问题在于我的数组不是规则的或矩形的。这只是x-y平面上的一堆随机点,彼此之间的间距不均匀,每个点都有一个z值。

    以下是我电子表格中的一小部分数据:

    x y z
    392 616 0.5
    416 614 1
    497 603 3
    533 598 3.5
    383 589 0.5
    574 574 4
    ...
    

    我尝试了几种方法,例如重塑阵列,但我总是遇到一些错误。我如何将这些数据绘制成热图,每个点的权重由z给出?非常感谢。

    我知道,由于数据点的间距不规则,热图为零的地方可能会有间隙,但我可以稍后通过我想出的方法外推它们的权重来进行分类,这样就不会有问题了。

    我最接近获取我要查找的图形的方法是使用以下代码:

    plt.hist2d(x, y, bins=8, weights=z, cmap="Greys")
    plt.colorbar()
    

    然而,问题是,如果给定的“箱子”中有多个点,它会计算“聚合”权重——例如,如果在特定箱子中有两个数据点的权重分别为1和2.5,则箱子将着色,就像其权重为1+2.5=3.5一样。是否有任何方法可以使其显示与最靠近箱子中心的数据点的权重相对应的颜色?

    e、 g.如果权重为2.5的数据点非常靠近箱子中心,而权重为1的数据点沿着箱子的一条边缘,是否有办法使箱子的权重为2.5?

    谢谢你,很抱歉打扰你。

    1 回复  |  直到 7 年前
        1
  •  1
  •   CodeZero    7 年前

    看看 http://scipy-cookbook.readthedocs.io/items/Matplotlib_Gridding_irregularly_spaced_data.html

    想法是使用 griddata 从…起 scipy.interpolate 在规则间距的网格上获取不规则间距的数据。

    如果我假设你有你的数据 x, y, z 在numpy数组中,您可以修改文档中给出的示例:

    # define grid.
    xi = np.linspace(np.amin(x),np.amax(x),100)
    yi = np.linspace(np.amin(y),np.amax(y),100)
    # grid the data.
    zi = griddata((x, y), z, (xi[None,:], yi[:,None]), method='cubic')
    # contour the gridded data
    CS = plt.contour(xi,yi,zi,15,linewidths=0.5,colors='k')
    CS = plt.contourf(xi,yi,zi,15,cmap=plt.cm.jet)
    plt.colorbar() # draw colorbar