热图算法可视化点多样性


18

谁能建议一种算法来生成用于可视化点多样性的热图?一个示例应用将用于绘制物种多样性高的区域。对于某些物种,每棵植物都被绘制了地图,导致点数很高,但是就区域多样性而言却意义不大。其他地区确实具有高度的多样性。

考虑以下输入数据:

x    y      cat
0.8  8.1    B
1.1  8.9    A
1.6  7.7    C
2.2  8.2    D
7.5  0.9    A
7.5  1.2    A
8.1  1.5    A
8.7  0.3    A
1.9  2.1    B
4.5  7.0    C
3.8  4.0    D
6.6  4.8    A
6.2  2.4    B
2.2  9.1    B
1.7  4.7    C
7.5  7.3    D
9.2  1.2    A

和结果图:

网格图

在左上象限中,存在高度多样化的斑块,而在右下象限中,存在具有高点集中度但多样性低的区域。可视化多样性的两种方法可能是使用传统的热图,或计算每个多边形中代表的类别数。如下图所示,这些方法的使用受到限制,因为热图在右下角显示出最大的强度,而分箱方法在只有一个类别的情况下看起来完全一样(可以通过增加分类的大小来解决。多边形箱,但结果变得不必要的细化)。

热图 在此处输入图片说明

我想到的一种方法是通过定义半径内不同类别的点数来填充传统的热图算法,然后在生成热图时使用该计数作为该点的权重。但是,我认为这可能易于产生不必要的伪影,例如相互加强会导致非常明显的结果。同样,相同类型的紧密映射点将继续显示为高浓度,只是程度不同。

另一种方法(可能更好,但计算量更大)将是:

  1. 计算数据集中的类别总数
  2. 对于输出图像中的每个像素:
    • 对于每个类别:
      • 计算到最近的代表点(r)的距离[可能受到某个半径的限制,超出该半径可以忽略不计]
      • 添加与1 / r 2成正比的权重

是否已经存在我不知道要执行此操作的算法,或者是否存在其他方法来可视化多样性?

编辑

按照Tomislav Muic的建议,我计算了每个类别的热图,并使用以下公式(QGIS栅格计算器)将其标准化:

((heatmap_A@1 >= 1) + (heatmap_A@1 < 1) * heatmap_A@1) +
((heatmap_B@1 >= 1) + (heatmap_B@1 < 1) * heatmap_B@1) +
((heatmap_C@1 >= 1) + (heatmap_C@1 < 1) * heatmap_C@1) +
((heatmap_D@1 >= 1) + (heatmap_D@1 < 1) * heatmap_D@1)

得到以下结果(他的回答下有评论): 归一化和


1
您的第二种方法看起来不错,这主要是一个统计问题,因此我将开始研究CRAN的相应R例程。不过,我们将尝试使用不同的网格尺寸,并寻找生物多样性的“官方”措施,以避免重新发明轮子。
Deer Hunter 2013年

Answers:


4

尝试为每个单独的类别制作热图。

然后对热图求和并使用类别数对其进行归一化。

这可能值得探索。


基于此建议,我在问题中添加了可视化效果,结果看起来不错!缺点是,如果要处理数百或数千个类别,则存储所有这些栅格将成为一个问题。
rudivonstaden

试想一下,如果您在每个类别之后将每个新的热图添加到复合热图,那将不是问题。然后的问题是,哪种方法在计算上会更快地实现-栅格和或逐像素计算。
rudivonstaden

恐怕这个答案与多样性无关。在得到的总和(和归一化)中,具有多个组的非常密集的区域看起来与没有一组但具有一组的密度相同的区域相同。
Andy W
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.