Hi,
I'm trying to create a stacked faceted barplot with errorbars for percent data. The problem is that the errorbars seem to be off somehow.
Here's what I did: (I post the input data in the comment below.)
library(ggplot2); library(ggthemes); library(plyr); library(dplyr); library(patchwork); library(lemon)
DF$effect <- factor(DF$effect,levels = c("swimming", "metamorphosis", "settlement", "dead"))
DF$treatment = factor(DF$treatment, levels = c('NEG', 'CCA', '10', '20', '30', '40'))
DF$time = factor(DF$time, levels = c('T0','T13.5','T22', 'T31', 'T38.5', 'T55.5', 'T155.5'))
ggplot(data=DF, aes(x=treatment, y=mean, ymax=110, fill=effect)) +
geom_bar(stat="identity", position='stack', width = 0.5)+
labs(x='Treatment', y="% Response (Mean ± SE)", size=12)+
scale_fill_manual(values=c('steelblue2','gray60', 'coral', 'lightpink'))+
facet_rep_wrap(~ time, ncol=2, scales='fixed', repeat.tick.labels = 'top')+
geom_errorbar(aes(ymin=mean-se, ymax=mean+se), width=0.1, size=0.1, position='identity')+
scale_y_continuous(expand = c(0,0), limit=c(0, 110)) +
scale_color_manual(values=c('steelblue2','gray60', 'coral', 'lightpink'))+
theme_bw()
And here's the resulting plot with errorbars all over the place:
Then I tried the follwoing to re-arrange the stacked error-bars:
DF1 <- within(DF, mean2 <- ave(mean,time,treatment,FUN=cumsum))
ggplot(data=DF1, aes(x=treatment, y=mean, ymax=110, fill=effect)) +
geom_bar(stat="identity", position='stack', width = 0.5)+
labs(x='Treatment', y="% Response (Mean ± SE)", size=12)+
scale_fill_manual(values=c('steelblue2','gray60', 'coral', 'lightpink'))+
facet_rep_wrap(~ time, ncol=2, scales='fixed', repeat.tick.labels = 'top')+
geom_errorbar(aes(ymin=mean2-se, ymax=mean2+se), width=0.1, size=0.1, position='identity')+
scale_y_continuous(expand = c(0,0), limit=c(0, 110)) +
scale_color_manual(values=c('steelblue2','gray60', 'coral', 'lightpink'))+
theme_bw()
And this results in the follwing plot whith errorbars still not where they should be. Does anyone know how to solve this problem?
Cheers,
Ingo
structure(list(time = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L,
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L,
6L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L,
7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L), .Label = c("T0", "T13.5",
"T22", "T31", "T38.5", "T55.5", "T155.5"), class = "factor"),
treatment = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L,
3L, 3L, 3L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L,
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L,
4L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 1L, 1L, 1L, 1L, 2L, 2L,
2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 6L,
6L, 6L, 6L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L,
4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 1L, 1L, 1L,
1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 5L, 5L,
5L, 5L, 6L, 6L, 6L, 6L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L,
3L, 3L, 3L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L
), .Label = c("NEG", "CCA", "10 µg", "20 µg", "30 µg", "40 µg"
), class = "factor"), effect = structure(c(1L, 2L, 3L, 4L,
1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L,
3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L,
2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L,
1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L,
3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L,
2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L,
1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L), .Label = c("swimming", "metamorphosis",
"settlement", "dead"), class = "factor"), mean = c(100, 0,
0, 0, 0, 0, 100, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0,
0, 80, 20, 0, 0, 100, 0, 0, 0, 0, 0, 100, 0, 100, 0, 0, 0,
100, 0, 0, 0, 86.667, 6.667, 6.667, 0, 6.667, 60, 33.333,
0, 100, 0, 0, 0, 0, 0, 100, 0, 100, 0, 0, 0, 100, 0, 0, 0,
86.667, 6.667, 6.667, 0, 0, 13.333, 86.667, 0, 100, 0, 0,
0, 0, 0, 100, 0, 100, 0, 0, 0, 100, 0, 0, 0, 73.333, 6.667,
20, 0, 0, 6.667, 93.333, 0, 100, 0, 0, 0, 0, 0, 100, 0, 100,
0, 0, 0, 100, 0, 0, 0, 80, 0, 20, 0, 0, 0, 100, 0, 100, 0,
0, 0, 0, 0, 100, 0, 86.667, 6.667, 6.667, 0, 33.333, 5.333,
61, 0, 46.667, 0, 46.667, 6.667, 0, 0, 100, 0), se = c(0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11.547, 11.547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 13.333, 6.667, 6.667, 0, 6.667, 23.094, 17.638,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13.333,
6.667, 6.667, 0, 0, 6.667, 6.667, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 17.638, 6.667, 20, 0, 0, 6.667,
6.667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
20, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13.333,
6.667, 6.667, 0, 33.333, 5.333, 30.892, 0, 24.037, 0, 17.638,
6.667, 0, 0, 0, 0)), row.names = 25:168, class = "data.frame")