Come ottenere dimensioni e dimensioni di sfaccettatura identiche in diversi grafici ggplot2 a più facce?

Ho una serie di grafici ggplot2 con un numero costante di sfaccettature orizzontali ma differenti. Vorrei salvare la grafica in formato .pdf in formato landscape a4.

Tuttavia, non so come posso raggiungere proporzioni identiche delle sfaccettature. Se provo a modificarlo manualmente e a variare width e height per diversi numeri di faccette verticali, le scale variano tra i grafici, cioè ottengo punti di dimensioni e linee di larghezza diverse.

In sostanza, come posso ottenere dimensioni e scale di sfaccettature identiche per grafici con un numero variabile di sfaccettature (verticali)?

Ecco un esempio:

 df <- expand.grid(a = 1:2, b = 1:5, x = 1:10) df$y <- df$x plot <- ggplot(data = df, mapping = aes(x = x, y = y)) + geom_point() plot1 <- plot + facet_grid(facets = "a ~ b") plot2 <- plot + facet_grid(facets = ". ~ b") ggsave(filename = "./figures/plot1.pdf", plot = plot1, height = 210, width = 297, units = "mm") ggsave(filename = "./figures/plot2.pdf", plot = plot2, height = 210, width = 297, units = "mm") 

Io uso questo codice per impostare le dimensioni del pannello sui valori assoluti, forse aiuta qui

 set_panel_size <- function(p=NULL, g=ggplotGrob(p), file=NULL, margin = unit(1,"mm"), width=unit(4, "cm"), height=unit(4, "cm")){ panels <- grep("panel", g$layout$name) panel_index_w<- unique(g$layout$l[panels]) panel_index_h<- unique(g$layout$t[panels]) nw <- length(panel_index_w) nh <- length(panel_index_h) if(getRversion() < "3.3.0"){ # the following conversion is necessary # because there is no `[<-`.unit method # so promoting to unit.list allows standard list indexing g$widths <- grid:::unit.list(g$widths) g$heights <- grid:::unit.list(g$heights) g$widths[panel_index_w] <- rep(list(width), nw) g$heights[panel_index_h] <- rep(list(height), nh) } else { g$widths[panel_index_w] <- rep(width, nw) g$heights[panel_index_h] <- rep(height, nh) } if(!is.null(file)) ggsave(file, g, width = convertWidth(sum(g$widths) + margin, unitTo = "in", valueOnly = TRUE), height = convertHeight(sum(g$heights) + margin, unitTo = "in", valueOnly = TRUE)) invisible(g) } print.fixed <- function(x) grid.draw(x)