【发布时间】:2014-02-13 08:32:32
【问题描述】:
我正在尝试绘制德国的等值线地图,显示各州的贫困率(灵感来自 this question)。
问题是某些州(例如柏林)完全被其他州(勃兰登堡)包围,我无法让 ggplot 识别勃兰登堡的“洞”。
这个例子的数据是here。
library(rgdal)
library(ggplot2)
library(RColorBrewer)
map <- readOGR(dsn=".", layer="germany3")
pov <- read.csv("gerpoverty.csv")
mrg.df <- data.frame(id=rownames(map@data),ID_1=map@data$ID_1)
mrg.df <- merge(mrg.df,pov, by="ID_1")
map.df <- fortify(map)
map.df <- merge(map.df,mrg.df[,c("id","poverty")], by="id")
ggplot(map.df, aes(x=long, y=lat, group=group)) +
geom_polygon(aes(fill=poverty))+
geom_path(colour="grey50")+
scale_fill_gradientn(colours=brewer.pal(5,"OrRd"))+
labs(x="",y="")+ theme_bw()+
coord_fixed()
注意柏林和勃兰登堡(东北部)的颜色是如何相同的。他们不应该——柏林的贫困率远低于勃兰登堡。似乎 ggplot 正在渲染柏林多边形,然后在其上渲染勃兰登堡多边形,没有孔。
如果我按照here 的建议将调用更改为geom_polygon(...),我可以解决柏林/勃兰登堡问题,但现在最北端的三个州的渲染不正确。
ggplot(map.df, aes(x=long, y=lat, group=group)) +
geom_polygon(aes(group=poverty, fill=poverty))+
geom_path(colour="grey50")+
scale_fill_gradientn(colours=brewer.pal(5,"OrRd"))+
labs(x="",y="")+ theme_bw()+
coord_fixed()
我做错了什么??
【问题讨论】:
-
您是否尝试使用 mapdocs.ggplot2.org/0.9.3.1/fortify.sp.html
-
见代码第 8 行:
map.df <- fortify(map)。还是你的意思是别的? -
github.com/hadley/ggplot2/wiki/plotting-polygon-shapefiles 有一个关于此问题的解决方法的讨论和示例
-
@Ista - 谢谢。你知道这个问题是否会得到解决吗?其他软件包不会以这种方式失败(请参阅下面的答案)。此外,如果“只是”一个应该呈现为透明的洞(例如湖)(背景显示通过),我认为这不会起作用。 This response 有一个例子。
-
@jlhoward - 我怀疑这会很快得到解决,你必须按照我的说明解决问题。