Ggplot2:在分面图的每个分面中重复基准曲线用于对比
解决ggplot分面图中基准物种曲线重复显示的问题
问题说明
需要展示10种植物不同生长阶段的平均粗蛋白含量,按单个物种分面;同时在每个分面中添加2个基准物种的数据用于对比。当前代码会将基准物种生成额外分面,而非在所有目标物种分面中显示。
问题根源
facet_wrap默认会读取所有图层数据中的sci_name_corrected字段,将基准物种也作为分面类别,因此多出两个分面。
解决方案
修改代码,让分面仅基于目标物种的数据,同时修正基准物种的曲线分组逻辑:
修改后的完整代码
ggplot(data = ten_spp_growth_stage) + # 绘制目标物种的点、线和误差棒,设为黑色便于区分 geom_point(aes(x = growth_stage_corrected, y = mean_CP), group = 1, size = 2, color = "black") + geom_line(aes(x = growth_stage_corrected, y = mean_CP), group = 1, color = "black") + geom_errorbar(aes(x = growth_stage_corrected, ymin = mean_CP - CP_se, ymax = mean_CP + CP_se), width = 0.2, color = "black") + # 绘制基准物种的点和线,指定独立数据框,按物种分组确保两条曲线分开 geom_point(data = grass_CP_df, aes(x = growth_stage_corrected, y = mean_CP, group = sci_name_corrected, col = sci_name_corrected)) + geom_line(data = grass_CP_df, aes(x = growth_stage_corrected, y = mean_CP, group = sci_name_corrected, col = sci_name_corrected)) + # 轴标签设置 ylab("Mean crude protein (%) ± SEM") + xlab("Growth stage") + # 主题调整 theme_bw() + theme( panel.grid.minor = element_blank(), legend.title = element_blank(), legend.position = "bottom", axis.text.x = element_text(size = 9, angle = 45, color = "black", hjust = 1), axis.text.y = element_text(size = 12, color="black"), axis.title.x = element_text(size = 12, color="black"), axis.title.y = element_text(size = 12, color="black") ) + # 仅基于目标物种的物种名称分面 facet_wrap(facets = ~ reorder(sci_name_corrected, desc(mean_CP)), nrow = 2)
关键修改点
- 将ggplot默认数据设为
ten_spp_growth_stage,确保分面仅基于目标物种的物种。 - 修正基准物种图层的
group映射为sci_name_corrected,让两个基准物种各自生成独立曲线。 - 给目标物种的图形元素添加
color = "black",与基准物种的彩色曲线形成清晰对比。
内容的提问来源于stack exchange,提问作者Autumn Smart
相关产品推荐
相关产品推荐

