ggplot2绘图点旁线条不显示、移除SD列并添加误差棒问题咨询
问题根因
- 线条无法显示是因为做长表转换时将所有非
Days的列都纳入了转换范围,标准差列SD/SD.1/SD.2被识别为菌株分类进入Strain字段,打断了目标菌株的连线逻辑;同时手动指定配色时仅设置了3个目标菌株的色值,SD类分类无对应配色,也会导致线不渲染。 - SD列出现在图底部的原因同样是长表转换时未区分数值列和标准差列,被当成普通菌株分类参与绘图,其对应的数值极低所以仅出现在y轴底部区域。
修改方案
先拆分OD值列和标准差列分别做长表转换,再合并为每个菌株+天数对应OD值和SD值的结构化数据,绘图时新增误差棒图层即可,完整代码如下:
library(tidyr) library(dplyr) library(ggplot2) # 转换OD值列为长表 od_long <- pivot_longer( data = OD, cols = c(Wildtype, Winter, Flagella_less), names_to = "Strain", values_to = "OD" ) # 转换SD列为长表,和OD长表顺序一一对应 sd_long <- pivot_longer( data = OD, cols = c(SD, SD.1, SD.2), names_to = NULL, values_to = "SD" ) # 合并得到最终绘图用长表 long_data <- bind_cols(od_long, sd_long) # 绘图 ggplot(long_data, aes(x = Days, y = OD, color = Strain)) + # 新增误差棒图层,宽度可根据实际需求调整 geom_errorbar(aes(ymin = OD - SD, ymax = OD + SD), width = 0.2) + geom_line() + geom_point(shape = 16, size = 1.5) + scale_color_manual(values = c("Wildtype" = "darkorange2", "Winter" = "cadetblue3", "Flagella_less" = "olivedrab3")) + labs(title = "Growth curve", x = "Days", y = "OD750", color = "Legend") + theme( axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5, color = "black", size = 8), axis.text.y = element_text(angle = 0, hjust = 1, vjust = 0.5, color = "black", size = 8), plot.title = element_text(hjust = 0.5, size = 13, face = "bold", margin = margin(t = 0, r = 10, b = 10, l = 10)), axis.title.y = element_text(size = 10, margin = margin(t = 0, r = 10, b = 0, l = 0)), axis.title.x = element_text(size = 10, margin = margin(t = 10, r = 10, b = 0, l = 0)), axis.line = element_line(size = 0.5, linetype = "solid", colour = "black") )
如果原数据中目标菌株的列名和示例不一致,替换pivot_longer中cols参数对应的列名即可。
内容的提问来源于stack exchange,提问作者paula
相关产品推荐
相关产品推荐

