I am trying to plot error bars for factor data as shown in this reproducible example here. This example just runs fine。然而,我对原始数据集尝试了同样的操作,但错误条拒绝绘图。我有点迷路了。以下是相关的代码片段,并尽可能地重复。知道为什么我不能让错误条工作吗?
DataFrame df
有两列:yaxis.og和物种(4种)像这样:
yaxis.og species
<dbl> <fct>
1 2.56 A
2 3.81 B
3 1.48 C
4 1.65 D
5 -0.177 A
.....
我计算了一个简单的线性模型,并将结果存储为:
summary_df <- summary(mod)$coefficients %>%
as_tibble() %>%
dplyr::mutate(species = c("A","B","C","D")) %>%
dplyr::rename(yaxis = Estimate) %>%
mutate(ymin = yaxis - 1.96 * `Std. Error`,
ymax = yaxis + 1.96 * `Std. Error`)
yaxis `Std. Error` df `t value` `Pr(>|t|)` species ymin ymax
<dbl> <dbl> <dbl> <dbl> <dbl> <chr> <dbl> <dbl>
1 0.611 0.145 61.2 4.22 8.21e- 5 A 0.327 0.895
2 2.16 0.160 78.0 13.5 3.93e-22 B 1.85 2.47
3 1.21 0.153 68.7 7.92 2.84e-11 C 0.912 1.51
4 2.21 0.223 162. 9.89 2.43e-18 D 1.77 2.64
当我在没有错误条的情况下绘制它时,它绘制得很好:
p <- ggplot(aes(x = species, y = yaxis.og, color = species, group = species), data = df) +
geom_jitter(width = 0.1) +
geom_point(aes(x = species, y = yaxis), color = 'black', size = 2, data = summary_df)
当我添加errorbars时,它会抛出一个巨大的错误。这个错误也没有多大意义,因为最后一层使用了不同的数据集,那么为什么需要yaxis.og
呢?
p + geom_errorbar(aes(x = species, ymin = ymin, ymax = ymax), data = summary_df)
Error in `geom_errorbar()`:
! Problem while computing aesthetics.
ℹ Error occurred in the 3rd layer.
Caused by error in `FUN()`:
! object 'yaxis.og' not found
Backtrace:
1. base (local) `<fn>`(x)
2. ggplot2:::print.ggplot(x)
4. ggplot2:::ggplot_build.ggplot(x)
5. ggplot2:::by_layer(...)
12. ggplot2 (local) f(l = layers[[i]], d = data[[i]])
13. l$compute_aesthetics(d, plot)
14. ggplot2 (local) compute_aesthetics(..., self = self)
15. base::lapply(aesthetics, eval_tidy, data = data, env = env)
16. rlang (local) FUN(X[[i]], ...)
1条答案
按热度按时间7ajki6be1#
问题是
ggplot()
中定义的所有aes都是全局美学,即使不使用,也会被所有geom
层继承。因此,ggplot2期望名称为yaxis.og
的列出现在每个geom
层使用的数据中,除非您像这样覆盖全局aes。在geom_point
中。解决这个问题的一个选择是将
inherit.aes=FALSE
添加到geom_errorbar
,这可以防止全局aes被继承,或者通过使用aes(..., y = NULL)
覆盖全局aes。使用一些基于
iris
的假示例数据:资料