如何在R中的多面图中保持单个图的大小

时间:2018-12-06 12:36:42

标签: r ggplot2 plot

我尝试让多面图跨越多页,但是最后一页有问题。根据最终页面上子图的数量,它们的大小会发生变化,以使其与前一页的大小不同。如何使所有子图具有相同的大小?查看我的使用ggforce的示例来查看我的问题。答案不必使用ggforce,它只是显示我的问题的最简单方法。

library(ggplot2)
library(ggforce)
df <- data.frame(x=rnorm(100, 1, 1), y=rnorm(100,1,1), group=rep(c(1,2), 100), 
item=rep(c(1,2,3,4,5), 40))
ggplot(df) +
    geom_point(aes(x, y)) +
    facet_grid_paginate(item~group, ncol = 2, nrow = 3, page = 1)
ggplot(df) +
    geom_point(aes(x, y)) +
    facet_grid_paginate(item~group, ncol = 2, nrow = 3, page = 2)

此代码将在下面生成两个页面。请注意,第2页的子图比第1页的子图大。我想要相同的大小,并在底部留一个空白区域。我还希望每页保留一组轴和标签。

The first page The second page

这里

2 个答案:

答案 0 :(得分:2)

egg::set_panel_size()可用于将面板尺寸设置为固定值,例如

library(ggplot2)
library(egg)
library(gridExtra)
df <- data.frame(x=rnorm(100, 1, 1), y=rnorm(100,1,1), group=rep(c(1,2), 100), 
                 item=rep(c(1,2,3,4,5), 40))

sd <- split(df, cut(df$item, 2))

p <- ggplot(df) +  geom_point(aes(x, y)) + facet_grid(item~group) + theme_grey()
pl <- lapply(sd, "%+%", e1 = p)
pl <- lapply(pl, egg::set_panel_size, width=unit(2,"in"), height = unit(1.5,"in"))

marrangeGrob(pl, nrow=1,ncol=1)

答案 1 :(得分:0)

此问题现已在更高的ggforce版本中解决(我对其进行了测试以在0.2.2版上工作)。问题中的代码现在可以根据需要运行。