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

如何用ggplot在同一图中绘制带SD误差棒的两组数据?

解决ggplot2分组绘制带误差棒的折线散点图问题

数据格式

Name    group   median  SD
First   Mydate  12.118  2.221
First   Best1   18.806  0.721
First   Best2   22.670  0.092
Second  Mydate  22.911  0.322
Second  Best1   23.495  0.756
Second  Best2   23.028  0.685

问题说明

需在同一图中展示First和Second两组数据,包含散点、分组折线及对应SD误差棒,但此前代码要么将所有点连成一条线,要么无法正确匹配每组的误差值。

正确实现代码

核心是通过group=Name指定分组逻辑,让折线和误差棒都匹配对应组的数据:

library(ggplot2)

# 构造数据框(若已加载数据可跳过此步)
mydf <- data.frame(
  Name = c("First", "First", "First", "Second", "Second", "Second"),
  group = c("Mydate", "Best1", "Best2", "Mydate", "Best1", "Best2"),
  median = c(12.118, 18.806, 22.670, 22.911, 23.495, 23.028),
  SD = c(2.221, 0.721, 0.092, 0.322, 0.756, 0.685)
)

# 绘图代码
ggplot(mydf, aes(x = group, y = median, color = Name, group = Name)) +
  geom_point(size = 3) +
  geom_line(linetype = "dashed") +
  geom_errorbar(
    aes(ymin = median - SD, ymax = median + SD),
    width = 0.2
  ) +
  scale_color_manual("Dataset", 
                     values = c("First" = "darkgreen", "Second" = "blue")) +
  labs(x = "分组", y = "中位数") +
  theme_bw()

关键细节

  • aes中设置group=Name:这是避免所有点连成一条线的核心,确保折线按Name分组连接对应group的点;
  • geom_errorbar直接调用数据中的SD列:每个Name+group组合对应唯一的SD值,会自动匹配color=Name的配色;
  • 给误差棒设置width=0.2:避免不同组的误差棒重叠,提升图表可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:45:42