我正在寻找一些关于热图算法的文档。我找到了一些实现,但它们并没有按照我的方式计算梯度。我不想通过“点击”来计算,而是想将数据点与一个值相关联。
我发现的唯一资源是 openheatmap.com 的源代码。这是一些很棒的东西,但我希望动态创建渐变,而不是从历史数据集。
我希望创建一个类似于推文世界的实时热图。
我正在寻找一些关于热图算法的文档。我找到了一些实现,但它们并没有按照我的方式计算梯度。我不想通过“点击”来计算,而是想将数据点与一个值相关联。
我发现的唯一资源是 openheatmap.com 的源代码。这是一些很棒的东西,但我希望动态创建渐变,而不是从历史数据集。
我希望创建一个类似于推文世界的实时热图。
从我收到的答案中,我得出了自己的结论,请评论其准确性。
因此,对于基于“命中”的热图,您有一个值为 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 ]
现在,您可以使用您选择的算法传播或模糊它。就像高斯模糊一样。
然后,您可以将您想要的任何渐变应用到这些值。
如果您可以读取/转换 OpenGL 片段着色器 -就是. 实时只是意味着您必须即时重新计算热图值。
嗯!
嗯,如果您想从“点击”的散点(如在推文世界中)推断“热图”(像素值的规则网格),一个明显的方法是首先只计算每个像素的数量在该精确像素上的命中(即量化命中位置到网格),并在数据上应用卷积滤波器,例如高斯滤波器以“混合”它。请参阅http://en.wikipedia.org/wiki/Gaussian_blur。
我只是看了一眼推文世界。看起来每条推文都为该位置增加了一些价值,并且所有位置都会衰减 - 可能随着时间的推移呈指数增长。这将允许在不规则的时间添加数据,同时显示看起来像平均排序的数据。因此,对于地图中的每个像素,请执行以下操作:
在固定的时间间隔:输出 = 输出 * 0.99
当打嗝发生时:输出 += value_of_burp
这些将分别应用于地图中的每个像素。您可以使用您想要的任何涂抹将值分散到像素上 - 甚至在一个圆圈上应用相同的值。当然 0.99 应该手动调整,直到你得到你喜欢的东西。
指数衰减意味着即使是非常活跃的像素也将具有有限的输出——换句话说,它是稳定的。