谁能建议一种算法来生成用于可视化点多样性的热图?一个示例应用将用于绘制物种多样性高的区域。对于某些物种,每棵植物都被绘制了地图,导致点数很高,但是就区域多样性而言却意义不大。其他地区确实具有高度的多样性。
考虑以下输入数据:
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
和结果图:
在左上象限中,存在高度多样化的斑块,而在右下象限中,存在具有高点集中度但多样性低的区域。可视化多样性的两种方法可能是使用传统的热图,或计算每个多边形中代表的类别数。如下图所示,这些方法的使用受到限制,因为热图在右下角显示出最大的强度,而分箱方法在只有一个类别的情况下看起来完全一样(可以通过增加分类的大小来解决。多边形箱,但结果变得不必要的细化)。
我想到的一种方法是通过定义半径内不同类别的点数来填充传统的热图算法,然后在生成热图时使用该计数作为该点的权重。但是,我认为这可能易于产生不必要的伪影,例如相互加强会导致非常明显的结果。同样,相同类型的紧密映射点将继续显示为高浓度,只是程度不同。
另一种方法(可能更好,但计算量更大)将是:
- 计算数据集中的类别总数
- 对于输出图像中的每个像素:
- 对于每个类别:
- 计算到最近的代表点(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年