Home > Mobile >  how do i create a bar chart to compare pre and post scores between participants?
how do i create a bar chart to compare pre and post scores between participants?

Time:10-31

I am trying to create a bar chart or column chart plot to compare pre and post scores between participants. I managed to do this in a line graph, however, I am struggling to visualise this within a bar chart, can anyone help me with this?

Here is the data I am using:

structure(list(Participant = c(2, 3, 5, 7), PRE_QUIP_RS = c(24, 
24, 20, 20), POST_QUIP_RS = c(10, 23, 24, 14), PRE_PDQ8 = c(11, 
8, 10, 4), POST_PDQ8 = c(7, 7, 9, 4), PRE_GDS = c(1, 7, 1, 0), 
    POST_GDS = c(1, 4, 2, 0), PRE_PERSISTENT = c(9, 13, 6, 2), 
    POST_PERSISTENT = c(9, 13, 11, 3), PRE_EPISODIC = c(3, 4, 
    2, 0), POST_EPISODIC = c(2, 5, 6, 2), PRE_AVOIDANCE = c(6, 
    3, 0, 2), POST_AVOIDANCE = c(3, 3, 4, 1), PRE_IPQ = c(39, 
    48, 40, 37), POST_IPQ = c(16, 44, 30, 17), PRE_GSE = c(28, 
    31, 36, 29), POST_GSE = c(29, 30, 30, 29), PRE_BCI = c(11, 
    9, 5, 3), POST_BCI = c(3, 15, 0, 0)), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -4L))

In terms of how I roughly want it to look, I want the bars to be placed together for pre and post for each participant, kind of like this: enter image description here

CodePudding user response:

You may try

library(tidyverse)

df %>%
  select(Participant, PRE_QUIP_RS, POST_QUIP_RS) %>%
  pivot_longer(cols = c(PRE_QUIP_RS, POST_QUIP_RS), names_to = "group") %>%
  mutate(group = str_split(group, "_", simplify = T)[,1],
         Participant = as.factor(Participant)) %>%
  ggplot(aes(x = Participant, y = value, group = group, fill = group))  
  geom_col(position = "dodge")

enter image description here

PRE POST order

dummy %>% select(Participant, PRE_QUIP_RS, POST_QUIP_RS) %>% pivot_longer(cols = c(PRE_QUIP_RS, POST_QUIP_RS), names_to = "group") %>% mutate(group = str_split(group, "_", simplify = T)[,1] %>% factor(., levels = c("PRE", "POST")), # HERE Participant = as.factor(Participant)) %>% ggplot(aes(x = Participant, y = value, group = group, fill = group)) geom_col(position = "dodge")

enter image description here

  • Related