How To Change The Order Of Factors In R
Reordering groups in a          ggplot2          chart tin can be a struggle. This is due to the fact that ggplot2 takes into business relationship the order of the          factor          levels, not the order y'all observe in your information frame. You tin can sort your input information frame with          sort()          or          arrange(), it will never have any impact on your          ggplot2          output.
This post explains how to reorder the level of your factor through several examples. Examples are based on two dummy datasets:
                                          # Library                                            library(ggplot2)                              library(dplyr)                                            # Dataset 1: one value per group                            data                <-                data.frame(                              proper name=                c("north","south","south-east","north-west","south-westward","northward-east","westward","east"),                              val=                sample(seq(1,10),                eight                )              )                                                          # Dataset 2: several values per group (natively provided in R)                                            # mpg                                            Method 1: the            forcats            library
          The forcats library is a library from the tidyverse especially fabricated to handle factors in R. It provides a suite of useful tools that solve mutual issues with factors. The            fct_reorder()            role allows to reorder the factor (data$proper noun            for instance) post-obit the value of another column (data$val            hither).
                                                # load the library                                                  library(forcats)                                                  # Reorder post-obit the value of another column:                                information                  %>%                                                  mutate(name =                  fct_reorder(name, val))                  %>%                                                  ggplot(                  aes(x=name,                  y=val))                  +                                                  geom_bar(stat=                  "identity",                  fill up=                  "#f68060",                  alpha=.six,                  width=.iv)                  +                                                  coord_flip()                  +                                                  xlab("")                  +                                                  theme_bw()                                                                  # Reverse side                                data                  %>%                                                  mutate(name =                  fct_reorder(proper name,                  desc(val)))                  %>%                                                  ggplot(                  aes(ten=name,                  y=val))                  +                                                  geom_bar(stat=                  "identity",                  make full=                  "#f68060",                  alpha=.vi,                  width=.four)                  +                                                  coord_flip()                  +                                                  xlab("")                  +                                                  theme_bw()                                                
            
          
If y'all have several values per level of your factor, yous can specify which function to apply to determine the social club. The default is to use the median, but you tin can use the number of data points per group to brand the nomenclature:
                                                # Using median                                mpg                  %>%                                                  mutate(class =                  fct_reorder(class, hwy,                  .fun=                  'median'))                  %>%                                                  ggplot(                  aes(x=                  reorder(class, hwy),                  y=hwy,                  fill=class))                  +                                                  geom_boxplot()                  +                                                  xlab("course")                  +                                                  theme(legend.position=                  "none")                  +                                                  xlab("")                                                                  # Using number of ascertainment per group                                mpg                  %>%                                                  mutate(form =                  fct_reorder(grade, hwy,                  .fun=                  'length'                  ))                  %>%                                                  ggplot(                  aes(x=grade,                  y=hwy,                  make full=course))                  +                                                  geom_boxplot()                  +                                                  xlab("class")                  +                                                  theme(legend.position=                  "none")                  +                                                  xlab("")                  +                                                  xlab("")                                                
            
          
The last common performance is to provide a specific order to your levels, you lot tin do and then using the                fct_relevel()                function every bit follow:
                                                            # Reorder post-obit a precise order                                        p                      <-                      data                      %>%                                                              mutate(name =                      fct_relevel(name,                                                              "due north",                      "n-due east",                      "east",                                                              "south-e",                      "s",                      "s-west",                                                              "due west",                      "n-west"))                      %>%                                                              ggplot(                      aes(x=name,                      y=val))                      +                                                              geom_bar(stat=                      "identity")                      +                                                              xlab("")                                          #p                                                                                  
            
Method 2: using            dplyr            merely
          The            mutate()            function of            dplyr            allows to create a new variable or modify an existing one. It is possible to use it to recreate a factor with a specific order. Here are 2 examples:
- The kickoff apply              
adjust()to sort your information frame, and reorder the cistron following this desired club.
 - The 2d specifies a custom society for the cistron giving the levels one by 1.
 
                              information                  %>%                                                  arrange(val)                  %>%                  # First sort by val. This sort the dataframe but NOT the gene levels                                                  mutate(name=                  factor(proper noun,                  levels=name))                  %>%                  # This pull a fast one on update the gene levels                                                  ggplot(                  aes(x=name,                  y=val))                  +                                                  geom_segment(                  aes(xend=name,                  yend=                  0))                  +                                                  geom_point(                  size=                  4,                  color=                  "orange")                  +                                                  coord_flip()                  +                                                  theme_bw()                  +                                                  xlab("")                                                data                  %>%                                                  conform(val)                  %>%                                                  mutate(proper noun =                  gene(name,                  levels=                  c("due north",                  "north-east",                  "east",                  "s-eastward",                  "south",                  "s-w",                  "westward",                  "north-w")))                  %>%                                                  ggplot(                  aes(10=proper noun,                  y=val))                  +                                                  geom_segment(                  aes(xend=name,                  yend=                  0))                  +                                                  geom_point(                  size=                  4,                  color=                  "orange")                  +                                                  theme_bw()                  +                                                  xlab("")                                                
            
          
Method 3: the            reorder()            function of base R
          In example your an unconditional user of the practiced old R, here is how to control the club using the                reorder()                part inside a                with()                call:
                                                            # reorder is close to order, simply is made to alter the society of the factor levels.                                        mpg$class                      =                      with(mpg,                      reorder(grade, hwy, median))                                        p                      <-                      mpg                      %>%                                                              ggplot(                      aes(x=class,                      y=hwy,                      fill=class))                      +                                                              geom_violin()                      +                                                              xlab("class")                      +                                                              theme(legend.position=                      "none")                      +                                                              xlab("")                                          #p                                                                                  
            
Source: https://r-graph-gallery.com/267-reorder-a-variable-in-ggplot2.html
Posted by: quinnoloplath.blogspot.com

0 Response to "How To Change The Order Of Factors In R"
Post a Comment