如何从ggplot2的热图功能中提取多边形?

时间:2015-08-03 15:26:13

标签: r ggplot2 spatial heatmap

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

1 个答案:

答案 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)

enter image description here

# plot level 5
plot(polys_dat[polys_dat$id=="1-005",], asp=1/20)

enter image description here