如何从 ggplot2 的热图函数中提取多边形?

How can I extract polygons from ggplot2's heatmap function?

我有一些空间数据点,我想对它们进行聚类。 因此我使用了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

一旦你建立了情节,这只是制作多边形的问题:

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)