Кто-нибудь может предложить алгоритм для создания тепловой карты для визуализации точечного разнообразия? Примером применения может служить картографирование районов с высоким видовым разнообразием. Для некоторых видов, каждое отдельное растение было нанесено на карту, что привело к большому количеству точек, но с очень небольшим значением с точки зрения разнообразия области. Другие области действительно имеют большое разнообразие.
Рассмотрим следующие входные данные:
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 / г 2
- Для каждой категории:
Есть ли уже алгоритмы, которые я не знаю, чтобы сделать это, или другие способы визуализации разнообразия?
редактировать
Следуя предложению Томислава Муика, я рассчитал тепловые карты для каждой категории и нормализовал их, используя следующую формулу (растровый калькулятор 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)
со следующим результатом (комментарии под его ответом):