Равная высота панели на разных графиках facet_grid, ggplot2 R - PullRequest
2 голосов
/ 13 июля 2020

Я хочу иметь два графика facet_grid рядом, один с 3 строками, а другой с 2, используя ggplot2 в R. По умолчанию grid.arrange пытается поддерживать одинаковую высоту двух facet_grids, однако я хочу иметь одинаковую высоту панели для обоих графиков. В частности, я хочу настроить высоту панели графика с минимальным количеством строк, чтобы она была равна высоте панели графика с максимальным количеством строк. Я не думаю, что это должно быть достаточно сложно. Я упускаю здесь какую-то общую идею? Поскольку я новичок ie в R, любая помощь будет принята с благодарностью! Спасибо!

Здесь воспроизводимый пример:

library(tidyverse)
library(gridExtra)
mtcars
p1 <- ggplot(mtcars,aes(x =mpg,y = disp,fill=cyl))+
geom_point()+
facet_grid(rows=vars(gear),cols=vars(cyl),scales = "free")

p2 <- ggplot(mtcars,aes(x =mpg,y = disp,fill=cyl))+
  geom_point()+
  facet_grid(rows=vars(am),cols=vars(cyl),scales = "free")

grid.arrange(p1,p2,ncol=2)

, который дает

фасетный график 3x3 того же размера, что и фасетный график 2x3

Я хочу, чтобы p2 имел высоту панели, начиная с p1, и использовал нижнее пустое пространство из p2 (справа) для легенды, оставшееся пространство пустым. И да, я должен поддерживать масштаб, чтобы быть свободным.

1 Ответ

1 голос
/ 13 июля 2020

не очень элегантно, но вы, возможно, можете нарисовать пустой прямоугольник, объединить его по вертикали с вашим p2, а затем объединить с p1:

library(grid)
empty_panel <- grid.rect(gp=gpar(col="white"))

p2t <- grid.arrange(p2,empty_panel,ncol=1, heights=c(0.7,0.3))
grid.arrange(p1,p2t,ncol=2)

, результат будет выглядеть как enter image description here

If you want the extra space to be used to place, for example, your legend, an option could be to play with legend.position and plot.margin:

p2 

some manual adjustment is required.

the plot will loook like: введите описание изображения здесь

...