我正在尝试绘制德国的分级地图,显示每个州的贫困率(受这个问题的启发)。
问题在于,一些州(例如柏林)完全被其他州(勃兰登堡)包围,我无法让ggplot识别勃兰登堡中的“空洞”。
此示例的数据在此处。
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先渲染了柏林的面,然后在没有洞的情况下渲染了勃兰登堡的面。
如果按照这里建议的更改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()
我做错了什么??
map.df <- fortify(map)
。或者你是指其他的内容? - jlhoward