У меня есть некоторые пространственные данные, и я использую приведенный ниже код, чтобы создать тепловую карту и извлечь созданные уровни в виде полигонов. Мой вопрос заключается в том, как ограничить количество создаваемых уровней? Моя цель состоит в том, чтобы иметь, например, 5 различных уровней плотности?Как ограничить количество уровней, созданных графиком плотности и?
На втором этапе я хочу извлечь многоугольники, принадлежащие одному конкретному уровню. Поскольку у меня нет данных из нормального распределения, используемого здесь в моем воспроизводимом примере, могут быть разные многоугольники с одинаковым уровнем плотности.
Вот мой код до сих пор:
#Load packages
library(ggplot2)
library(sp)
#create spatial data
lon<-rnorm(10000,mean = 15,sd=1)
lat<-rnorm(10000,mean=45,sd=1)
data <-cbind.data.frame(lon,lat)
#create the heatmap
heatmap <- ggplot(data,aes(x=lon,y=lat))+ stat_density2d(data=data,
aes(x=lon, y=lat, fill=..level..,
alpha=..level..), geom="polygon")
# build the heatmap without plotting it
gb_heat <- ggplot_build(heatmap)
# extract the polygon specifications
gb_heat_dat <- gb_heat$data[[1]]
# make some polygons!
SpatialPolygons(lapply(unique(gb_heat_dat$group), function(x) {
pts <- gb_heat_dat[gb_heat_dat$group == x,]
Polygons(list(Polygon(as.matrix(data.frame(x=pts$x, y=pts$y)))), as.character(x))
})) -> polys
# plot them
plot(polys)
Edit: Спасибо @ ответ pHroc, я могу контролировать количество уровней, и я также узнал, как извлечь многоугольники с тем же уровнем. Но теперь я столкнулся с проблемой, что некоторые созданные области очень маленькие. Есть ли способ контролировать минимальный размер области или количество точек, каждая из которых должна содержать по крайней мере одну область?
Спасибо! Это был хороший намек. Существует ли также возможность определить минимальную площадь для каждого уровня или назвать минимальное количество точек на каждом уровне? – user2988757