如何用ggplot绘制仅连接同一生境-物种组的关联散点图?
解决方案
问题出在分组变量的设置上——你仅按Habitat分组,但每个生境下包含两种不同物种,导致ggplot会跨物种连接同一生境的所有点。要实现仅连接每个Habitat-Species组合内的点,需要将分组变量设置为两个变量的组合。
正确代码
# 示例颜色向量,可替换为你的hab.col2 hab.col2 <- c("lagoon" = "#1f77b4", "bank" = "#2ca02c", "pelagic" = "#ff7f0e") ggplot(df2.summ, aes(x = detect_dist, y = avg, group = interaction(Habitat, Species))) + geom_point(aes(color = Habitat, shape = Species), size = 2) + geom_path(aes(color = Habitat)) + # 全局aes已定义分组,无需重复设置 geom_errorbar(aes(ymin = avg - sd, ymax = avg + sd, color = Habitat), size = .5, width=.01) + scale_color_manual(values = hab.col2) + xlab('Threat detection distance') + ylab('Abundance') + theme_bw() + theme(text = element_text(size = 12, family = "Times"))
关键说明
interaction(Habitat, Species)会生成一个包含生境和物种组合的复合分组变量,确保每个独立的Habitat-Species组内的点被单独连接,不会出现跨组连线的问题。- 也可以用
paste(Habitat, Species)替代interaction(...),两者效果一致,但interaction()更适合分类变量的组合场景。
内容的提问来源于stack exchange,提问作者FlyingDutch
相关产品推荐
相关产品推荐

