如何以不同的相对宽度垂直对齐多个ggplot

问题描述 投票:0回答:1

我正在使用cowplot包来创建绘图网格。当我想垂直绘制两个宽度不同的图时,就会出现问题。这是一个例子:

library(dplyr)
library(ggplot2)
library(cowplot)

plot1 = iris %>% 
  ggplot(aes(x = Species, y = Sepal.Width, fill = Species)) +
  geom_col()

plot2 = iris %>% 
  filter(Species != 'virginica') %>% 
  ggplot(aes(x = Species, y = Sepal.Width, fill = Species)) +
  geom_col()

w1 = max(layer_data(plot1, 1)$x)
w2 = max(layer_data(plot2, 1)$x)

plot_grid(plot1, plot2, align = 'v', ncol = 1, rel_widths = c(w1, w2), axis = 'l')

enter image description here

您可以在代码中看到,我使用layer_data()函数提取出绘图中有多少列,因为我想递归运行它,有时会删除一些组,所以我确保列数。因此,目标是使不同图中的列垂直对齐。在前面的代码中,rel_width参数无效。

我已经尝试过类似的事情:

plot_grid(plot1,
          plot_grid(plot2, NA, align = 'h', ncol = 2, rel_widths = c(w2, w1-w2)),
          align = 'v', ncol = 1, axis = 'lr')

但是它不能按预期工作,并且取决于w1> w2。一些帮助,将不胜感激

r ggplot2 alignment vertical-alignment cowplot
1个回答
0
投票

来自?plot_grid

rel_widths(可选)相对列宽的数值向量。例如,在两列网格中,rel_widths = c(2,1)将使第一列的宽度是第二列的两倍。

自变量rel_widths在单列绘图网格中不执行任何操作。

您可能需要手动调用具有适当尺寸的cowplot::draw_plot,以将绘图放置在所需的位置。

© www.soinside.com 2019 - 2024. All rights reserved.