我有一些空间数据点,我想将它们聚类。 因此我使用ggplot2的热图功能。 我得到一张漂亮的热图,但是我不想对创建的区域做进一步的分析,为了能够做到这一点,我想提取创建的多边形。
我该怎么做?或者我是否必须使用另一个热图功能,如果是,那么我应该使用哪一个?
我试图制作一个可重复的例子。这是:
library(ggplot2)
lon<-rnorm(10000,mean = 15,sd=1)
lat<-rnorm(10000,mean=45,sd=1)
data <-cbind.data.frame(lon,lat)
heatmap <- ggplot(data,aes(x=lon,y=lat))+ stat_density2d(data=data,
aes(x=lon, y=lat, fill=..level..,
alpha=..level..), geom="polygon")
heatmap
答案 0 :(得分:3)
一旦你构建了情节,它只是制作多边形的问题:
library(ggplot2)
library(MASS)
library(sp)
# get some data
data(geyser)
# mimic your plot
m <- ggplot(geyser, aes(x = duration, y = waiting)) + xlim(0.5, 6) + ylim(40, 110)
hm <- m + stat_density2d(aes(fill = ..level..), geom="polygon")
# build the plot w/o plotting it
gb <- ggplot_build(hm)
# take a look
str(gb$data)
# this is what we want
dat <- gb$data[[1]]
# make some polygons!
SpatialPolygons(lapply(unique(dat$group), function(x) {
pts <- dat[dat$group == x,]
Polygons(list(Polygon(as.matrix(data.frame(x=pts$x, y=pts$y)))), as.character(x))
})) -> polys
# make a SPDF (add more data to it if you need to)
polys_dat <- SpatialPolygonsDataFrame(polys,
data.frame(id=sapply(slot(polys, "polygons"), slot, "ID"),
row.names=sapply(slot(polys, "polygons"), slot, "ID"),
stringsAsFactors=FALSE))
# plot them!
plot(polys, asp=1/20)
# plot level 5
plot(polys_dat[polys_dat$id=="1-005",], asp=1/20)