Extract number of rows from faceted ggplot

前端 未结 3 629
猫巷女王i
猫巷女王i 2021-01-22 06:15

Consider a faceted ggplot

plotdf <- data.frame(x = 1:21, 
                     y = 3*(1:21)+4, 
                     z = c(rep(1,3), rep(2,3), rep(3,3), rep(4         


        
3条回答
  •  暗喜
    暗喜 (楼主)
    2021-01-22 06:50

    If you don't define the number of rows or columns manually, this is calculated for you with wrap_dims.

    So, in your example:

    n_panels <- length(unique(ggplot_build(p)$data[[1]]$PANEL))
    
    wrap_dims(n_panels)
    
    [1] 3 3
    

    To take into account any manual definitions as well, we can look up those parameters too, e.g. ggplot_build(p)$layout$facet$params$nrow gives the number of rows.

    A function then to get the number of rows and columns:

    get_row_col <- function(p) {
      n <- length(unique(ggplot_build(p)$data[[1]]$PANEL))
      par <- ggplot_build(p)$layout$facet$params
      wrap_dims(n, par$nrow, par$ncol)
    }
    
    > get_row_col(p)
    [1] 3 3
    

提交回复
热议问题