如何基于数据框中物种的lrr起止值创建箱线图?
实现基于起止值的物种lrr箱线图(ggplot2)
你的问题核心是:每个物种仅有的两个lrr值要作为箱线的上下起止点,同时可以用Est列作为箱线的中线。原代码出错是因为把lrr设为x轴,导致ggplot将每个lrr值单独分组,无法生成单条箱线。以下针对两种数据格式给出解决方案:
一、长格式数据处理
长格式每个物种对应两行lrr数据,先按物种分组计算lrr的起止范围,再手动指定箱线的统计量:
library(tidyverse) # 假设你的长格式数据名为df_long df_long_summary <- df_long %>% group_by(spp, Est, SE) %>% summarise( lrr_min = min(lrr), # 起止下限 lrr_max = max(lrr), # 起止上限 .groups = "drop" ) # 绘制自定义箱线图 ggplot(df_long_summary) + aes( x = spp, ymin = lrr_min, ymax = lrr_max, middle = Est, # 用给定的Est作为箱线中线 y = Est ) + geom_boxplot(stat = "identity") + labs(x = "物种", y = "lrr值") + theme_minimal()
二、宽格式数据处理
宽格式已直接给出lrr1(起点)和lrr2(终点),无需额外分组计算,直接指定参数即可:
# 假设你的宽格式数据名为df_wide ggplot(df_wide) + aes( x = spp, ymin = lrr1, ymax = lrr2, middle = Est, y = Est ) + geom_boxplot(stat = "identity") + labs(x = "物种", y = "lrr值") + theme_minimal()
可选:用误差线替代箱线(更简洁展示起止)
如果不需要箱线的箱体样式,仅需展示起止范围和中线,可使用geom_errorbar:
# 宽格式示例 ggplot(df_wide) + aes(x = spp, ymin = lrr1, ymax = lrr2) + geom_errorbar(width = 0.2, size = 1) + # 起止范围线 geom_point(aes(y = Est), color = "#E63946", size = 2) + # 中线点 labs(x = "物种", y = "lrr值") + theme_minimal()
内容的提问来源于stack exchange,提问作者Cami
相关产品推荐
相关产品推荐

