使用ggplot2为绘图中每个数据点添加不同误差条的问题
问题解决:按组和周生成不同长度的误差条
你的问题出在直接对整个Weights列计算标准差,导致所有误差条用的是全局标准差,长度完全一致。要生成对应每组每周的误差条,需要先按Group和Weeks分组,计算每组每周的平均体重和标准差,再用汇总后的数据绘图。
步骤1:分组汇总数据
使用dplyr工具包对原始数据分组计算均值和标准差:
library(dplyr) ww_summary <- ww_long %>% group_by(Group, Weeks) %>% summarize( mean_weight = mean(Weights), sd_weight = sd(Weights), .groups = "drop" )
步骤2:修改ggplot代码
用汇总后的ww_summary数据绘图,误差条使用分组计算的标准差:
library(ggplot2) ggplot(ww_summary, aes(x = as.numeric(Weeks), y = mean_weight, group = Group, color = Group)) + geom_line(linewidth = 1.5) + geom_point(size = 5) + geom_errorbar(aes(ymin = mean_weight - sd_weight, ymax = mean_weight + sd_weight), width = 0.2, size = 1) + labs(title = "Weekly Weights", x = "Age (Weeks)", y = "Weights (g)", color = "Group") + scale_x_continuous(breaks = unique(ww_long$Weeks), expand = c(0, 0)) + scale_y_continuous(breaks = seq(16, 32, by = 2), expand = c(0, 0), labels = function(x) round(x)) + coord_cartesian(ylim = c(16, 32))
关键说明
- 原代码中
scale_x_continuous的breaks参数错误使用了names(ww)[-1],这里替换为unique(ww_long$Weeks)来获取所有周数的刻度。 - 汇总数据时添加
.groups = "drop"是为了取消分组状态,避免后续绘图出现警告。
内容的提问来源于stack exchange,提问作者firmo23
相关产品推荐
相关产品推荐

