Home > front end >  Same y-axis range with ggarrange if I am already using facets and cannot use them again
Same y-axis range with ggarrange if I am already using facets and cannot use them again

Time:12-08

my question is basically a follow-up to enter image description here

As you can see, the left image's y-axis ranges from 2 to 5, while the right plot's y-axis ranges from 1.5 to 3.5. How can I make them be the same?

CodePudding user response:

One option would be to compute and add the range of your x and y variables to your dataset before splitting, which could then be used to set the limits.

library(dplyr)
library(ggplot2)
library(ggpubr)
library(purrr)

mtcars %>% 
  mutate(across(c(mpg, wt), list(range = ~list(range(.x))))) %>%
  group_split(vs) %>% 
  map(~ggplot(., aes(x = mpg, y = wt))  
        geom_point()  
        scale_x_continuous(limits = .$mpg_range[[1]])  
        scale_y_continuous(limits = .$wt_range[[1]])  
        facet_grid(rows = vars(am), cols = vars(gear))) %>% 
  ggarrange(plotlist = .)

CodePudding user response:

I'm once again arguing for abandoning the 'ggarrange' approach, this time in favour of the {patchwork} package, which allows you to apply an operation to all previous plots. In this case, we can use & scale_y_continuous(limits = ...) to set the limits for all plots.

library(ggplot2)
library(dplyr)
library(purrr)
library(patchwork)

mtcars %>% 
  group_split(vs) %>% 
  map(~ggplot(., aes(x = mpg, y = wt))  
        geom_point()  
        facet_grid(rows = vars(am), cols = vars(gear))) %>% 
  wrap_plots() &
  scale_y_continuous(limits = range(mtcars$wt))

Created on 2022-12-08 by the reprex package (v2.0.0)

  • Related