ggplot地图绘制中geom_path与geom_text组合使用异常问题求助
问题原因
- 核心冲突来自ggplot2的美学映射继承规则:默认情况下全局
ggplot()中定义的美学参数会自动传递给所有子图层,而你用来放置标注的cnames数据集仅包含邮编中心点坐标,没有group字段,导致全局定义group=group时geom_text图层找不到变量报错。 - 未指定全局映射时
geom_path不生效,是因为没有给该图层单独指定group映射:geom_path需要group参数识别每个多边形的边界点顺序,没有指定时会把所有点按默认顺序乱连,最终出现异常绘图效果。
修复方案
方案1:仅给需要的图层指定group映射
无需改动全局配置,直接给geom_path单独添加group映射即可正常出图:
p4_fixed <- ggplot(data = zipcodedf, aes(x = long, y = lat)) + geom_polygon(aes(group=group, fill=hispanic.dis)) + # geom_path单独指定group参数,和geom_polygon的分组规则保持一致 geom_path(aes(group=group), color = "black", size = 0.2)+ geom_text(data=cnames, aes(long, lat, label = zip), size=3, fontface='bold', color="black")+ scale_fill_brewer(breaks=c(1, 2, 3, 4, 5, 6, 7), labels=c("<5", "5-10", "11-15", "16-20", "21-25", "26-30", "31+"), palette="Reds", na.value="darkgrey") + coord_equal() + theme(panel.background=element_blank())+ theme(panel.background= element_rect(color="black")) + theme(axis.title = element_blank(), axis.text = element_blank()) + labs(title = "Hispanic Population by Zip Code", fill="Hispanic Population(% of Total)")
方案2:全局配置后手动取消不需要的映射继承
如果偏好把公共参数放在全局,只需在geom_text中手动取消group的继承即可避免报错:
p5_fixed <- ggplot(data = zipcodedf, aes(x = long, y = lat, group = group, fill = hispanic.dis)) + geom_polygon() + geom_path(color = "black", size = 0.2)+ # 新增group=NULL取消继承全局的group映射,避免找不到变量报错 geom_text(data=cnames, aes(x=long, y=lat, label = zip, group=NULL), size=3, fontface='bold', color="black")+ scale_fill_brewer(breaks=c(1, 2, 3, 4, 5, 6, 7), labels=c("<5", "5-10", "11-15", "16-20", "21-25", "26-30", "31+"), palette="Reds", na.value="darkgrey") + coord_equal() + theme(panel.background=element_blank())+ theme(panel.background= element_rect(color="black")) + theme(axis.title = element_blank(), axis.text = element_blank()) + labs(title = "Hispanic Population by Zip Code", fill="Hispanic Population(% of Total)")
内容的提问来源于stack exchange,提问作者Kiran
相关产品推荐
相关产品推荐

