在某处我犯了一个非常简单的错误。感谢您指出这个错误发生在哪里......
我想创建一个叠加置信区间和组均值的小提琴图。就像这个了不起的新包装中的示例一样。
没有任何 CI 的通用小提琴图可以正常工作:
p <- ggplot(data=diamonds, aes(x=cut, y=price))
p + geom_violin(aes(x=cut, y=price)) +
geom_jitter(height = 0, width = 0.1, alpha = 0.05) +
geom_crossbar(stat="summary", fun.y=mean, fun.ymax=mean, fun.ymin=mean,
fatten=2, width=.5)
我的问题是合并置信区间。
我首先创建必要的摘要统计信息:
errbar_lims <- group_by(diamonds, cut) %>%
summarize(mean=mean(price), se=sd(price)/sqrt(n()),
upper=mean+(2*se), lower=mean-(2*se))
然后我想添加到情节中geom_errorbar
:
p <- ggplot(data=diamonds, aes(x=cut, y=price))
p + geom_violin(aes(x=cut, y=price)) +
geom_jitter(height = 0, width = 0.1, alpha = 0.05) +
geom_crossbar(stat="summary", fun.y=mean, fun.ymax=mean, fun.ymin=mean,
fatten=2, width=.5) +
geom_errorbar(aes(x= ymax=errbar_lims$upper, ymin=errbar_lims$lower),
stat='identity', width=.25)
但是 ggplot 的错误一直告诉我,我正在映射到一个单一的组美学,而不是我试图绘制的 5 个组。
也许我的错误是我一开始就设置了映射?
更新
在最初发布后查看了一些评论后,完整的脚本现在如下所示:
errbar_lims <- group_by(diamonds, cut) %>%
summarize(mean=mean(price), se=sd(price)/sqrt(n()),
upper=mean+(2*se), lower=mean-(2*se))
p <- ggplot(data=diamonds, aes(x=cut, y=price))
p + geom_violin(aes(x=cut, y=price)) +
geom_jitter(height = 0, width = 0.1, alpha = 0.05) +
geom_crossbar(stat="summary", fun.y=mean, fun.ymax=mean, fun.ymin=mean,
fatten=2, width=.5) +
geom_errorbar(aes(x = cut, ymin = lower, ymax = upper), errbar_lims, inherit = FALSE)
然而错误仍然存在:
Error in FUN(X[[i]], ...) : object 'price' not found