ggplot2: How can I set axis breaks separately for each facet in facet_wrap?

前端 未结 1 1325
轻奢々
轻奢々 2020-12-19 16:31

I would like to modify the breaks and limits of y-axis of each one of the graphs in the facet_wrap. I want for example reduce the breaks for some of them or I want that they

相关标签:
1条回答
  • 2020-12-19 17:00

    I don't know of a way to modify the axis breaks and ranges of individual facets in a faceted plot. However, another option is to create separate plots for each level of the faceting variable and then lay out all the plots together. Creating each plot individually allows you to have finer control over axis breaks and ranges for each plot.

    Here's an example with the built-in mtcars data frame:

    library(scales)     # For pretty_breaks
    library(grid)       # For textGrob
    library(gridExtra)  # For grid.arrange
    library(cowplot)    # For plot_grid
    

    The code below creates a list of plots, one for each level of cyl. Note the use of scale_y_continuous to set the y-range for each plot. This is just an illustration. You can exert much finer control over the axis ranges and breaks for each plot if you wish.

    pl = lapply(sort(unique(mtcars$cyl)), function(i) {
    
      p = ggplot(mtcars[mtcars$cyl==i, ], aes(wt, mpg)) + 
        facet_wrap(~cyl) +
        geom_point() + 
        labs(x="Weight", y="") +
        scale_y_continuous(limits=c(ifelse(i==4, 10, 0), 1.1 * max(mtcars$mpg[mtcars$cyl==i])),
                           breaks=pretty_breaks(ifelse(i==6, 6, 3))) +
        scale_x_continuous(limits=range(mtcars$wt)) +
        theme(plot.margin=unit(c(0, 0.1, 0, -1),"lines"))
    
      # Remove x-axis labels and title except for last plot
      if(i < max(mtcars$cyl)) p = p + theme(axis.text.x=element_blank(),
                                            axis.title.x=element_blank())
    
      return(p)
    })
    

    Now, lay out the plots in a single column. We also add a y-axis label.

    grid.arrange(textGrob("MPG", rot=90), plot_grid(plotlist=pl, ncol=1, align="h"), 
                 widths=c(0.03,0.97), ncol=2)
    

    0 讨论(0)
提交回复
热议问题