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

ggplot2绘图点旁线条不显示、移除SD列并添加误差棒问题咨询

问题根因

  1. 线条无法显示是因为做长表转换时将所有非Days的列都纳入了转换范围,标准差列SD/SD.1/SD.2被识别为菌株分类进入Strain字段,打断了目标菌株的连线逻辑;同时手动指定配色时仅设置了3个目标菌株的色值,SD类分类无对应配色,也会导致线不渲染。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:36:03