gpt4 book ai didi

r - ggplot 中的等值线图,带有孔的多边形

转载 作者:行者123 更新时间:2023-12-03 20:04:10 26 4
gpt4 key购买 nike

我正在尝试绘制德国的等值线图,显示各州的贫困率(灵感来自 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正在渲染柏林多边形,然后在它上面渲染勃兰登堡多边形,没有洞。

如果我将电话更改为 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()



我究竟做错了什么??

最佳答案

这只是对@Ista 答案的扩展,不需要知道哪些州(柏林、不来梅)需要最后呈现。

这种方法利用了 fortify(...) 的事实。生成一列,hole它标识一组坐标是否是一个孔。因此,这会在没有孔的区域之前(例如下方)渲染所有区域(id)具有任何孔。

非常感谢@Ista,没有他的回答,我无法想出这个(相信我,我花了很多时间尝试......)

ggplot(map.df, aes(x=long, y=lat, group=group)) +
geom_polygon(data=map.df[map.df$id %in% map.df[map.df$hole,]$id,],aes(fill=poverty))+
geom_polygon(data=map.df[!map.df$id %in% map.df[map.df$hole,]$id,],aes(fill=poverty))+
geom_path(colour="grey50")+
scale_fill_gradientn(colours=brewer.pal(5,"OrRd"))+
labs(x="",y="")+ theme_bw()+
coord_fixed()

关于r - ggplot 中的等值线图,带有孔的多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21748852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com