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

如何使用ggplot2在同一x、y坐标轴上绘制两种不同条件的细菌生长曲线

方法1:直接叠加图层(无需修改原始数据结构)

你可以直接在同一段ggplot代码里添加两个geom_line图层,分别指定两个OD值对应的y轴映射即可:

ggplot(Group1, aes(x = time, group = Strain)) +
  # 绘制条件1(OD600.x)的曲线,指定绿色
  geom_line(aes(y = OD600.x, colour = "条件1")) +
  # 绘制条件2(OD600.y)的曲线,指定红色
  geom_line(aes(y = OD600.y, colour = "条件2")) +
  # 保留按菌株分面的设置
  facet_wrap(~Strain) +
  # 自定义颜色和图例名称
  scale_colour_manual(
    name = "实验条件",
    values = c("条件1" = "green", "条件2" = "red"),
    labels = c("条件1(原OD600.x分组)", "条件2(原OD600.y分组)")
  ) +
  # 统一y轴名称
  ylab("OD600")

这个方法操作最简单,适合快速出图。


方法2:先转换数据为长格式(更符合ggplot语法规范,后续调整更灵活)

ggplot更推荐长格式数据,你可以用tidyr包的pivot_longer先把两个OD列合并成统一的观测值列,同时新增分组列区分两种实验条件:

library(tidyr)
library(ggplot2)

# 宽表转长表
Group1_long <- pivot_longer(
  data = Group1,
  cols = c(OD600.x, OD600.y), # 指定要合并的两列
  names_to = "实验条件", # 新分组列的列名
  values_to = "OD600" # 新OD值列的列名
)

# 绘制合并图
ggplot(Group1_long, aes(x = time, y = OD600, colour = 实验条件, group = interaction(Strain, 实验条件))) +
  geom_line() +
  facet_wrap(~Strain) +
  scale_colour_manual(
    values = c("OD600.x" = "green", "OD600.y" = "red"),
    labels = c("OD600.x" = "条件1", "OD600.y" = "条件2")
  )

这个方法的优势是如果后续要添加误差线、统计检验等其他图层,代码逻辑会更简洁,不需要重复指定多个图层。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:39:03