ggplot绘制NMDS排序图报错:object 'Year' not found
问题原因分析
核心冲突:全局美学映射的继承问题
你在ggplot初始化时设置了全局美学映射:
ggplot(data.scores.pa, aes(x = NMDS1, y = NMDS2, group = Year))
其中group = Year会被后续所有图层默认继承,除非明确禁用继承或覆盖该映射。
而你后续调用geom_segment和geom_text_repel时使用的vec.sp.df.pa、spp.scrs2数据集里不存在Year列。当这些图层尝试继承全局的group = Year映射时,找不到对应的变量,直接触发object 'Year' not found错误。
验证逻辑
移除这些依赖非主数据集的图层后,剩余的geom_point、stat_ellipse都基于包含Year列的data.scores.pa运行,所以能正常绘图,这也印证了问题根源是全局映射的不当继承。
解决方法
给不需要全局映射的图层添加inherit.aes = FALSE参数,阻止其继承全局的group设置:
# 修改后的图层示例 geom_segment(data=vec.sp.df.pa, aes(x=0,xend=MDS1,y=0,yend=MDS2), arrow = arrow(length = unit(0.5,"cm")),colour="grey", inherit.aes = FALSE) + geom_text_repel(data=vec.sp.df.pa,aes(x=MDS1,y=MDS2,label=species),size=2, inherit.aes = FALSE) + geom_segment(data=spp.scrs2,aes(x=0,xend=MDS1,y=0,yend=MDS2), arrow = arrow(length = unit(0.5, "cm")),colour="black", inherit.aes = FALSE) + geom_text_repel(data=spp.scrs2, aes(x=MDS1,y=MDS2,label=species),size=2, inherit.aes = FALSE)
内容的提问来源于stack exchange,提问作者iris
相关产品推荐
相关产品推荐

