You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于数据框中物种的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 08:40:43