如何使嵌套的plot_grid缩放到相同大小?

3

我有7个图表,将它们分成两列,一列有3个图表,另一列有4个图表。我使用cowplot中的plot_grid实现。结果几乎完美,但是3个图表的那一列图表较大。如何缩放该列以使所有图表大小相同,并对齐每列的第一个和最后一个图表?

library(ggplot2)
library(cowplot)

Value <- seq(0,1000, by = 1000/10)
Index <- 0:10
DF <- data.frame(Index, Value)

plot1 <- ggplot(DF, aes(x = Index, y = Value)) +
  geom_line(linetype = 2) +
  theme(aspect.ratio = 0.5)

plot2 <- ggplot(DF, aes(x = Index, y = Value)) +
  geom_line(linetype = 2) +
  theme(aspect.ratio = 0.5)

plot3 <- ggplot(DF, aes(x = Index, y = Value)) +
  geom_line(linetype = 2) +
  theme(aspect.ratio = 0.5)

plot4 <- ggplot(DF, aes(x = Index, y = Value)) +
  geom_line(linetype = 2) +
  theme(aspect.ratio = 0.5)

plot5 <- ggplot(DF, aes(x = Index, y = Value)) +
  geom_line(linetype = 2) +
  theme(aspect.ratio = 0.5)

plot6 <- ggplot(DF, aes(x = Index, y = Value)) +
  geom_line(linetype = 2) +
  theme(aspect.ratio = 0.5)

plot7 <- ggplot(DF, aes(x = Index, y = Value)) +
  geom_line(linetype = 2) +
  theme(aspect.ratio = 0.5)

col1 <- plot_grid(plot1, plot2, plot3, align = "v", ncol = 1)
col2 <- plot_grid(plot4, plot5, plot6, plot7, align = "v", ncol = 1)
plot_grid(col1, col2, ncol = 2, align = "hv")

enter image description here

3个回答

5
您可以在第一列中放置一个空图:
col1 <- plot_grid(plot1, plot2, plot3, NULL, align = "v", ncol = 1)

然而,在我看来,这并不适用于嵌套的绘图网格。嵌套的绘图网格是专门用于将具有复杂排列的绘图组合在一起,例如一个绘图在一个列中横跨另一列的两行。对于您想要的内容,我会进行单个plot_grid()调用,就像其他评论建议的那样:
plot_grid(plot1, plot4, plot2, plot5, plot3, plot6, NULL, plot7,
          ncol = 2, align = "hv")

enter image description here

请注意,当您指定特定的纵横比时,align选项不起作用。您可以选择指定纵横比或对齐方式。在大多数情况下,不需要指定纵横比,您可以在保存图形时进行设置。特别是函数save_plot()具有一个纵横比选项(应用于整个图像,而不是绘图区域)。

刚刚意识到你是 cowplot 的作者——这是一个很棒的包,谢谢! - Aaron left Stack Overflow
1
能否从具有更多图形的网格中继承布局并将其应用于另一个网格?最后,将调整大小的图形移动到中心位置。理论上听起来很容易,但我也无法使其正常工作。这将是cowplot的一个很好的增强功能 :) - pat-s

4
我上周刚做了这件事!尝试只调用一次plot_grid,在您想要空白处使用NULL。
myplotlist <- list(plot1, plot2, plot3, NULL, plot4, plot5, plot6, plot7, plot8)
plot_grid(plotlist=myplotlist, align = "v", ncol = 2)

0

如果您想保留原始情节大小差异并使它们对齐,我有一个简单的作弊修复方法,基于@ClausWilke的答案。

您可以使用cowplot:plot_grid通过添加“嵌套”的空图并更改其高度/宽度比例来调整绘图对齐。请参见下面的解决方案:

group1<-plot_grid(plot1, plot2, plot3, nrow = 3)
group2<-plot_grid(plot4, plot5, plot6, plot7, NULL, rel_heights = c(1,1, 1,1,0.001), nrow = 5)
plot_grid(group1, group2, align='h', nrow=1)

这是输出结果: {{link1:输入图像描述}}
在那些轴参数无法胜任的情况下,这对我帮助很大。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接