组合多个ggplot2多边形/路径

时间:2012-03-04 19:06:19

标签: r ggplot2

我正在使用ggplot2创建县级数据的等值区域图。我想强调多县地区。覆盖县地图数据子集的路径或多边形非常简单,但这会留下“内部”路径线。有没有办法将这些区域组合成一个组或只是隐藏内部线?

require(ggplot2)
require(maps)
require(maptools)

va <- map_data("county", region="virginia")

ggplot(va, aes(long, lat)) + coord_map() + 
  geom_polygon(aes(group=group)) +
  geom_path(data=subset(va, subregion %in% c("patrick", "henry", "franklin",
    "pittsylvania")), aes(group=group), size=1, color="white")

http://i.imgur.com/cRzqX.png

编辑:以上示例并不完全是我想要做的。下面的代码更能代表实际项目。实际地图将比这更详细,因为他们使用人口普查区域数据并在地面上有地理编码点。

va <- map_data("county", region="virginia")
cty <- data.frame(subregion=unique(va$subregion))
cty$stat <- sample.int(nrow(cty))
va <- merge(va, cty, by="subregion")

p <- ggplot(va, aes(long, lat)) + coord_map() + 
  geom_polygon(aes(group=group, fill=stat), color="grey") +
  geom_path(data=subset(va, subregion %in% c("patrick", "henry", "franklin",
    "pittsylvania")), aes(group=group), size=1, color="white")

enter image description here

3 个答案:

答案 0 :(得分:4)

如果我找对你,你只需要将geom_path换成geom_polygon即可在没有内线的情况下进行绘图:

ggplot(va, aes(long, lat)) + coord_map() + geom_polygon(aes(group=group)) + 
   geom_polygon(data=subset(va, subregion %in% c("patrick", "henry", "franklin",
   "pittsylvania")), aes(group=group), size=1, color="white",fill="white")

enter image description here

答案 1 :(得分:1)

查看?map,您只需执行以下操作,

boundary <- map("county", regions=c("virginia.patrick", "virginia.henry", "virginia.franklin", "virginia.pittsylvania"), boundary=TRUE, interior=FALSE)

现在,出于某种原因,map_dataggplot2:::fortify.map似乎都不满意这一点,但要提取fortify.map的相关部分并获取它并不困难以喜欢coord_map的格式。如果您这样做,我建议您提交错误报告,因为ggplot2似乎应该支持map的这些选项。

答案 2 :(得分:0)

您可以识别并删除子区域之间边界处的点

d <- subset(va, subregion %in% c("patrick", "henry", "franklin", "pittsylvania"))
duplicates <- duplicated(d[, c("long","lat")]) |
              duplicated(d[, c("long","lat")], fromLast=TRUE)

d2 <- d[duplicates, ]
d3 <- d[!duplicates, ]
d3 <- arrange(d3, order , region, group )
ggplot(d, aes(long, lat)) + geom_polygon(aes(fill=subregion), col=NA) +
  geom_point(colour="black") +
  geom_point(data=d2, colour="red") +
  geom_path(data=d3, fill=NA, colour="blue", size=1.2)

不确定如何修复缠绕顺序和这类事情......