我試圖畫出德國的等值線圖,顯示各州的貧困率(靈感來源於this question)。ggplot與有孔洞的多邊形的等值線圖
問題在於,一些州(例如柏林)完全被其他州(勃蘭登堡州)包圍,而且我無法讓ggplot識別勃蘭登堡的「洞」。
本示例的數據是here。
library(rgdal)
library(ggplot2)
library(RColorBrewer)
map <- readOGR(dsn=".", layer="germany3")
pov <- read.csv("gerpoverty.csv")
mrg.df <- data.frame(id=rownames([email protected]),[email protected]$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(...)
,建議爲here,我可以解決柏林/勃蘭登堡問題,但現在三個最北端的州都不正確。
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()
我在做什麼錯?
您是否嘗試使用地圖<-fortify(地圖)爲您的地圖? http://docs.ggplot2.org/0.9.3.1/fortify.sp.html – Rentrop
請參閱代碼第8行:'map.df < - fortify(map)'。還是你的意思是別的? – jlhoward
在https://github.com/hadley/ggplot2/wiki/plotting-polygon-shapefiles有一個針對此問題的解決方法的討論和示例 – Ista