[R] How to superimpose jitter and barplot in ggplot2?

Luigi Marongiu m@rong|u@|u|g| @end|ng |rom gm@||@com
Mon Feb 21 17:19:20 CET 2022


Hello,
I am following this post
https://www.datanovia.com/en/lessons/ggplot-error-bars/ to superimpose
a jitter plot and a barplot with error bars.

Te example works:
```
df2 <- ToothGrowth
df2$dose <- as.factor(df2$dose)
head(df2, 3)
df2.summary <- df2 %>%
  group_by(dose) %>%
  summarise(
    sd = sd(len, na.rm = TRUE),
    len = mean(len)
  )
df2.summary

ggplot(df2, aes(dose, len)) +
  geom_col(data = df2.summary, fill = NA, color = "black") +
  geom_jitter( position = position_jitter(0.2), color = "black") +
  geom_errorbar( aes(ymin = len-sd, ymax = len+sd),
                 data = df2.summary, width = 0.2)
```
but on my data, it does not. The data I have is   similar to the
example, only with 2 classes rather than 3:
```
> str(df)
'data.frame': 82 obs. of  33 variables:
$ id              : int  1 2 3 4 5 6 7 8 9 10 ...
...
$ tocopherol      : num  22.39 15.93 19.91 9.52 35 ...
$ tot_ascorb      : num  7.306 NA NA 0.102 NA ...
...
$ covid           : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 2 2 2 2 2 ...
> df.summary <- df %>%
  +   group_by(covid) %>%
  +   summarise(
    +     sd = sd(tot_ascorb, na.rm = TRUE),
    +     len = mean(tot_ascorb, na.rm = TRUE)
    +   )
`summarise()` ungrouping output (override with `.groups` argument)
> df.summary
# A tibble: 2 x 3
covid    sd   len
<fct> <dbl> <dbl>
  1 No     6.79  47.8
2 Yes   31.4   14.5
```
but when I try to run ggplot, it works in part. The bar plot works:
```
> ggplot(df, aes(covid, len)) +
  geom_col(data = df.summary, fill = NA, color = "black") +
  geom_errorbar(aes(ymin = len, ymax = len+sd),
                data = df.summary, width = 0.2)
```
but the jitter does not:
```
> ggplot(df, aes(covid, len)) +
  +   geom_col(data = df.summary, fill = NA, color = "black") +
  +   geom_errorbar(aes(ymin = len, ymax = len+sd),
                    +                  data = df.summary, width = 0.2) +
  + geom_jitter(position = position_jitter(0.2), color = "black")
Error in FUN(X[[i]], ...) : object 'len' not found
```
What am I getting wrong?
Thanks



-- 
Best regards,
Luigi



More information about the R-help mailing list