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

如何用ggplot绘制分组多线图分析捕食对选育鲑鱼生长的影响

问题

我有一个分析捕食对生长选育鲑鱼影响的数据集,包含起始、结束两个时间点、3种不同品系(Strain)、有无捕食者2种环境(Env)。我希望绘制能整合这些维度的可视化图,但目前只能分开时间点做两张图或者取平均值,当前使用的ggplot代码如下:

ggplot(data = aqua, mapping = aes(x = Env, y = mass, group = Strain, color = Strain))+
  geom_line(stat = "summary", fun = mean, size = 1, linetype = 2)+
  geom_point(stat = "summary", fun = mean, size = 3)+
  stat_summary(geom = "errorbar", fun.data = mean_se, width = 0.1, size = .5)+
  labs(x = "Environment", y = "Body mass (g)")+
  theme(axis.title.x.bottom = element_text(size = 20), axis.title.y.left = element_text(size = 20))

请问最优的绘图方法是什么?

最优绘图方案

针对你的需求,最优方案是整合时间点维度,用分面或时间点与环境组合的方式展示所有变量的交互,既避免丢失时间点信息,又能清晰对比品系、环境的差异。下面提供两种实用实现方式:

方式一:按时间点分面(推荐,逻辑清晰)

将两个时间点拆分为并列子图,每个子图保留你原有的环境x轴、品系分组对比,整体视觉统一,便于直观对比时间点的变化:

# 假设数据集内时间点列名为Time(需根据实际数据集调整列名)
ggplot(data = aqua, mapping = aes(x = Env, y = mass, group = Strain, color = Strain))+
  geom_line(stat = "summary", fun = mean, size = 1, linetype = 2)+
  geom_point(stat = "summary", fun = mean, size = 3)+
  stat_summary(geom = "errorbar", fun.data = mean_se, width = 0.1, size = .5)+
  labs(x = "环境", y = "体重(g)", color = "品系")+
  facet_wrap(~Time, ncol = 2)  # 按时间点分两列展示
  theme(
    axis.title.x = element_text(size = 20), 
    axis.title.y = element_text(size = 20),
    strip.text = element_text(size = 18),
    legend.title = element_text(size = 18)
  )

方式二:环境+时间点组合x轴(适合强调生长趋势)

将环境与时间点合并为x轴分组,用线条连接同一品系、同一环境下的两个时间点,更直观展示鲑鱼在不同环境下的生长变化:

ggplot(data = aqua, mapping = aes(x = interaction(Env, Time), y = mass, group = interaction(Strain, Env), color = Strain))+
  geom_line(stat = "summary", fun = mean, size = 1)+
  geom_point(stat = "summary", fun = mean, size = 3)+
  stat_summary(geom = "errorbar", fun.data = mean_se, width = 0.1, size = .5)+
  labs(x = "环境-时间点", y = "体重(g)", color = "品系")+
  scale_x_discrete(labels = c("无捕食者-起始", "无捕食者-结束", "有捕食者-起始", "有捕食者-结束"))+
  theme(
    axis.title.x = element_text(size = 20), 
    axis.title.y = element_text(size = 20),
    axis.text.x = element_text(angle = 45, hjust = 1),
    legend.title = element_text(size = 18)
  )

注意事项

  • 需确认数据集内时间点的实际列名(比如是否为SamplingTime),根据列名调整代码
  • 若需突出品系与环境的交互,可调整facet_wrap的参数为~Strain或~Env,匹配你的分析重点
  • 两种方式均保留了原有的均值+标准误展示逻辑,确保统计信息完整

内容的提问来源于stack exchange,提问作者Bruno Nunes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:30:54