Я пытаюсь нарисовать карту хороплета Германии, показывающую уровень бедности по штату (вдохновленный этим вопросом).
Проблема в том, что некоторые из государств (например, Берлин) полностью окружены другими государствами (Бранденбург), и мне трудно получить ggplot, чтобы узнать "дыру" в Бранденбурге.
Данные для этого примера здесь.
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(...)
, как предложено здесь, я могу исправить проблему Берлина/Бранденбурга, но теперь три самых северных государства отображаются неправильно.
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()
Что я делаю неправильно?