I have the following sample data, which describe how long (duration) each respondent in my questionnaire needed to answer each question (question) and in which week the question was answered (there were several waves of the same questionnaire)
n <- 100
data2 <- data.frame(
question = paste("q", sample(1:3, n, replace = TRUE), sep=""),
week = sample(1:3, n, replace = TRUE),
duration = round(rnorm(n, mean = 15, sd = 5), 0)
)
ggplot(aes(x = week, fill=question), data = data2) + geom_bar(position='stack') +
xlab("Week")
But how can I make the same plot with mean durations instead of counts (on the y-axis)?
stat_summary is the usual function for doing the calculations for you:
ggplot(aes(x = week, y = duration, fill=question), data = data2) +
stat_summary(fun=mean, geom="bar", position = "stack") +
xlab("Week")

Edit: This changed my practice the other week when I found out what stat_ layers can do! Demystifying stat_ layers in ggplot2
I would use dplyr::group_bylike so.
data2 %>%
group_by(week,question) %>%
summarise(mean = mean(duration)) %>%
ggplot(aes(week,mean,fill = factor(question))) +
geom_col()
Good luck!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With