我正在使用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')
您可以在代码中看到,我使用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。一些帮助,将不胜感激
来自?plot_grid
:
rel_widths(可选)相对列宽的数值向量。例如,在两列网格中,rel_widths = c(2,1)将使第一列的宽度是第二列的两倍。
自变量rel_widths
在单列绘图网格中不执行任何操作。
您可能需要手动调用具有适当尺寸的cowplot::draw_plot
,以将绘图放置在所需的位置。