我正在使用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")
编辑:以上示例并不完全是我想要做的。下面的代码更能代表实际项目。实际地图将比这更详细,因为他们使用人口普查区域数据并在地面上有地理编码点。
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")
答案 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")
答案 1 :(得分:1)
查看?map
,您只需执行以下操作,
boundary <- map("county", regions=c("virginia.patrick", "virginia.henry", "virginia.franklin", "virginia.pittsylvania"), boundary=TRUE, interior=FALSE)
现在,出于某种原因,map_data
和ggplot2:::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)
不确定如何修复缠绕顺序和这类事情......