【问题标题】:Heatmap on x-y plane with z as weighting以 z 为权重的 x-y 平面上的热图
【发布时间】:2018-07-29 17:07:07
【问题描述】:

我已经在这个论坛上浏览了数十个关于热图的答案,但我仍然遇到问题,所以我想我会问自己。请记住,直到一个月前我才知道 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()

但是,这样做的问题是,如果给定“bin”中有多个点,它会计算“聚合”权重 - 例如如果在特定的 bin 中有两个权重分别为 1 和 2.5 的数据点,则 bin 将被着色,就好像它的权重是 1+2.5=3.5。有什么办法可以让它显示与最接近 bin 中心的数据点的权重相对应的颜色?

例如如果权重为 2.5 的数据点非常靠近 bin 中心,而权重为 1 的数据点位于 bin 的边缘之一,有没有办法让 bin 的权重为 2.5?

谢谢你,打扰了。

【问题讨论】:

    标签: python numpy plot heatmap contour


    【解决方案1】:

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

    这个想法是使用scipy.interpolate 中的griddata 在规则间隔的网格上获取不规则间隔的数据。

    如果我假设您的数据 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 2018-01-10
      • 2019-06-15
      • 2019-04-11
      • 2021-06-10
      • 1970-01-01
      • 2019-11-24
      相关资源
      最近更新 更多