在栅格单元格周围绘制轮廓线

时间:2016-01-13 01:10:19

标签: r ggplot2

使用ggplot2我想绘制一个多边形(凸包?),它尊重栅格图的单元边界(用geom_raster创建)。我可以使用凸壳方法,但它们会通过x-y坐标而不是光栅图的细胞周围(对不起,我的术语受到我的无知影响)。例如,给定以下具有分类属性d的x-y坐标数据:

df <- data.frame(x = c(295, 300, 305, 310, 295, 300, 305, 310),
                 y = c(310, 310, 310, 310, 315, 315, 315, 315),
                 d = c(2, 2, 2, 1, 2, 1, 1, 1))

我可以使用ggplot2的geom_raster将属性绘制为填充:

ggplot(df, aes(x, y)) +
  geom_raster(aes(fill = d)) +
  coord_fixed()

给予:

enter image description here

但我想要的是d定义的类别的轮廓外壳。像这样:

enter image description here

我可以使用基础R和ggplot2执行此操作,还是使用raster包或其他网格/栅格/ GIS包?我更喜欢尽可能简单。

1 个答案:

答案 0 :(得分:3)

你当然可以使用R的空间设施来获取这些多边形。这是一种方式:

library(raster)

## Convert your data.frame to a raster object
r <- rasterFromXYZ(df)

## Extract polygons
pp <- rasterToPolygons(r, dissolve=TRUE)

## Convert SpatialPolygons to a format usable by ggplot2
outline <- fortify(pp)

## Put it all together:
ggplot(df, aes(x, y)) +
    geom_raster(aes(fill = d)) +
    coord_fixed() +
    geom_path(aes(x = long, y = lat, group = group), data = outline, 
              size=1.5, col="gold")

enter image description here