如何使用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
相关产品推荐
相关产品推荐

