Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Rearrage/reorder bargraph with multiple comparisons in R?

Considering the dataset below: Three variables alongside a categorical sex variable

#Example Data
    Extraversion <- c(4.3, 2, 4.2, 4, 2, 1.5, 3.8, 3.5, 2.1, 2.1, 3)
    Anxiety <- c(1.2, 3, 1, 2.3, 5, 5, 2.3, 2.2, 5, 4.5, 3)
    Depression <- c(2, 3.5, 1, 3.5, 5, 5, 1, 2, 4.3, 4.5, 1)
    Sex <- c("Male", "Female", "Male", "Male", "Female", "Female", "Male", 
             "Female", "Female", "Female", "Male")
    
    data <- data.frame(Extraversion, Anxiety, Depression, Sex)

Now, I realize how I would make a graph like the one from the code here.

library(ggpubr)
library(ggplot2)
library(ggsci)

data %>% #specifies dataset
  pivot_longer(-Sex) %>%  #Pivotes graph longways
  ggbarplot(x = "Sex", #Splitting variable
            y = "value", #Just call this value, its the value on the x axis
            facet.by = "name", #selects variables for comapirson leave "name"
            add = c("mean_se", "jitter"),, #Creates error bars, Adds data points jittered
            width = .99, #Edits wdith of bars
            size = .2, #Border thickness
            error.plot = "errorbar",
            add.params = list(size = .1, alph = .3), #changes size of points and alpha level
            color = "black",
            fill = "Sex", #Fills colors by Sex variable
            alpha = .7, #Alpha for bar fill color
            palette = "jama", #ggsci palette
            position = position_dodge()) +
  theme_classic2() #theme

However, I was wondering if there was a way to reorder the comparisons? For example, the comparison for Extraversion before depression and anxiety (from left to right in the graph). At the moment it defaults as Anxiety in the first panel.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

I’ve would typically do something like this with the forcats package, but I’ve only every done it with single variables. Perhaps some way to arrange the panels?

>Solution :

You can create the "name" column in a factor where your order the levels like in the mutate in the following code:

library(ggpubr)
library(ggplot2)
library(ggsci)
data %>% #specifies dataset
  pivot_longer(-Sex) %>%  #Pivotes graph longways
  mutate(name = factor(name, levels = c("Extraversion", "Depression", "Anxiety"))) %>%
  ggbarplot(x = "Sex", #Splitting variable
            y = "value", #Just call this value, its the value on the x axis
            facet.by = "name", #selects variables for comapirson leave "name"
            add = c("mean_se", "jitter"),, #Creates error bars, Adds data points jittered
            width = .99, #Edits wdith of bars
            size = .2, #Border thickness
            error.plot = "errorbar",
            add.params = list(size = .1, alph = .3), #changes size of points and alpha level
            color = "black",
            fill = "Sex", #Fills colors by Sex variable
            alpha = .7, #Alpha for bar fill color
            palette = "jama", #ggsci palette
            position = position_dodge()) +
  theme_classic2() #theme

Output:

enter image description here

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading