Left align two graph edges (ggplot)

前端 未结 9 1302
梦谈多话
梦谈多话 2020-11-22 01:08

I\'m using ggplot and have two graphs that I want to display on top of each other. I used grid.arrange from gridExtra to stack them. The problem is I want the

相关标签:
9条回答
  • 2020-11-22 01:42

    I know this is an old post, and that it has already been answered, but may I suggest combining @baptiste's approach with purrr to make it nicer-looking:

    library(purrr)
    list(A, B) %>% 
      map(ggplotGrob) %>% 
      do.call(gridExtra::gtable_rbind, .) %>% 
      grid::grid.draw()
    
    0 讨论(0)
  • 2020-11-22 01:44

    Try this,

     gA <- ggplotGrob(A)
     gB <- ggplotGrob(B)
     maxWidth = grid::unit.pmax(gA$widths[2:5], gB$widths[2:5])
     gA$widths[2:5] <- as.list(maxWidth)
     gB$widths[2:5] <- as.list(maxWidth)
     grid.arrange(gA, gB, ncol=1)
    

    Edit

    Here's a more general solution (works with any number of plots) using a modified version of rbind.gtable included in gridExtra

    gA <- ggplotGrob(A)
    gB <- ggplotGrob(B)
    grid::grid.newpage()
    grid::grid.draw(rbind(gA, gB))
    
    0 讨论(0)
  • 2020-11-22 01:50

    The patchwork package handles this by default:

    library(ggplot2)
    library(patchwork)
    
    A <- ggplot(CO2, aes(x = Plant)) + geom_bar() + coord_flip() 
    B <- ggplot(CO2, aes(x = Type)) + geom_bar() + coord_flip() 
    
    A / B
    

    Created on 2019-12-08 by the reprex package (v0.3.0)

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