这是一些虚拟数据
set.seed(3)
d = data.frame(y = rnorm(120), x =rep(letters[5:7],40), category = rep(LETTERS[1:2],each=60))
我想显示所有数据(黑色)的均值误差条,仅显示category=="B"
(蓝色)的误差条。
我试过
ggplot(d, aes(x=x,y=y)) + stat_summary(geom = "errorbar", fun.data=mean_se)
+ stat_summary(data=subset(d,category=="B"), geom = "errorbar",
fun.data=mean_se, color="blue")
但是错误栏的重叠是令人不快的。所以我试过
ggplot(d, aes(x=x,y=y)) + stat_summary(geom = "errorbar", fun.data=mean_se)
+ stat_summary(aes(colour=category), geom = "errorbar", fun.data=mean_se,
position=position_dodge(0.5)) + scale_colour_manual(values=c(rgb(1,1,1,alpha=0), "blue"))
但是蓝色情况下错误栏的宽度会自动缩小,蓝色和黑色线之间的平均位置与标签不匹配。
实现这一目标的最佳解决方案是什么?
答案 0 :(得分:3)
我没有使用stat_summary
。相反,我计算了聚合数据和数据的平均值和标准误差,仅包括类别B.然后,我可以使用这些值来创建绘图。但是,我发现我的错误栏与您展示的不同。
这是我对这个问题的尝试:
library(ggplot2)
library(dplyr)
set.seed(3)
d <- data.frame(y=rnorm(120), x=rep(letters[5:7], 40),
category=rep(LETTERS[1:2], each=60))
# Calculate the mean and standard error for each group
df_B <- d %>% filter(category == "B") %>% group_by(x) %>%
summarise(mu=mean(y), se=sqrt(var(y)/length(y)))
df_all <- d %>% group_by(x) %>% summarise(mu=mean(y), se=sqrt(var(y)/length(y)))
df <- rbind(df_B, df_all)
df$category <- rep(c("B", "All"), each=3)
ggplot(df, aes(x=x, ymin=mu - se, ymax=mu + se, color=category, width=0.5)) +
geom_errorbar(position=position_dodge(width=0.6)) +
scale_color_manual(breaks=c("All", "B"), values=c("black", "blue"))