基于价值的热力图算法

6
我正在寻找关于热力图算法的一些文档。我已经找到了一些实现方法,但它们没有按照我需要的方式计算渐变。我想将数据点与一个值相关联,而不是按“点击数”计算。
我唯一找到的资源是来自 openheatmap.com 的源代码。这是一些很棒的东西,但我想实时创建渐变,而不是从历史数据集中创建。
我想创建一个类似于 a world of tweets 的实时热力图。
4个回答

7

根据我收到的答案,我得出了自己的结论,请评论其准确性。

因此,对于基于“点击数”的热图,您有一个值为0的像素矩阵:

[ 0 0 0 ]
[ 0 0 0 ]
[ 0 0 0 ]

当您有一个点击时,您会增加相应的元素。

[ 1 3 2 ]
[ 4 1 2 ]
[ 0 3 5 ]

但是,如果您有值而不是点击,则将该值添加到矩阵中。例如,让我们使用美元金额来给出这个示例矩阵:

[ $20.34 $42.42 $55.23 ]
[ $45.87 $00.87 $03.75 ]
[ $08.99 $32.05 $88.65 ]

然后,我们标准化数据。这样可以得到:

[ .897 .973 .984 ]
[ .977 .087 .351 ]
[ .669 .959 .994 ]

现在,您可以使用所选的算法来扩展或模糊此数据。例如高斯模糊

然后,您可以将任何梯度应用于这些值。


你能分享一些你通过这样做获得的结果的例子吗? - Nick

0

如果你想从“命中”散点图(例如在World of Tweets中)推断出一个“热力图”(像素值的常规网格),一种显而易见的方法是首先计算每个像素上的命中次数(即将命中位置量化为网格),然后在数据上应用卷积滤波器,例如高斯滤波器,以“混合”数据。 请参见http://en.wikipedia.org/wiki/Gaussian_blur


我不想通过点击次数来量化,而是想通过一个值来进行量化。一个区域可能有很多“点击”,但值却很低,而另一个区域可能只有几个“点击”,但值却很高,所以热力图的渲染不仅仅基于位置点,还要考虑与该点相关联的值。 - nickethier
此外,我参考了 World of Tweets 的实时功能,而非实现方式。 - nickethier
嗯,那么你只需要将像素的值相加,然后运行卷积滤波器 :) - Antti Huima

0
如果您能阅读/转换OpenGL片段着色器-在这里。 实时只是意味着您必须即时重新计算热力图值。
希望对您有所帮助!

0
我刚才浏览了一下“推特世界”。看起来每个推文都会为该位置增加一些价值,而所有位置都会衰减——可能是指数级的。这将允许在不规则的时间添加数据,同时显示出某种平均值。因此,对于地图中的每个像素,请执行以下操作:
在固定的时间间隔内:输出 = 输出 * 0.99
当发生打嗝时:输出 += 打嗝的价值
这些应分别应用于地图中的每个像素。您可以使用任何模糊技术将价值分散到像素上——甚至可以在圆形上应用相同的价值。当然,0.99 应手动调整,直到您得到满意的结果。
指数衰减意味着即使非常活跃的像素也会有一个有限的输出——换句话说,它是稳定的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接