3

我有一些空间数据,我使用下面的代码创建热图并将创建的关卡提取为多边形。我现在的问题是如何限制创建的关卡数量?我的目标是拥有例如 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)

编辑:感谢@pHroc 的回答,我能够控制级别的数量,并且我还发现了如何提取具有相同级别的多边形。但是现在我遇到了一些创建区域非常小的问题。有没有办法控制一个区域的最小大小或每个区域至少应该包含的点数?

4

1 回答 1

3

要了解问题的第一部分,您可以将参数添加bins = 5stat_density2d().

heatmap <- ggplot(data,aes(x=lon,y=lat))+  stat_density2d(data=data,
                  aes(x=lon, y=lat, fill=..level.., alpha=..level..),
                  bins = 5, geom="polygon")
于 2015-08-05T13:42:51.830 回答