仅在ggarrange()中更改一个图的大小

f0brbegy  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(123)

我正在尝试使用ggarrange()绘制2x2图。我想让第四块地的高度是其他三块地的一半。
我已经尝试了一个解决方案与高度的论点,但它似乎只适用于列操作。

fig1 <- ggarrange(p1,p2,p3,p4,
                  labels = 'auto',
                  ncol = 2,
                  nrow = 2,
                  common.legend = TRUE,
                  legend = 'top', 
                  heights = c(2, 2, 2, 1),
                  widths=c(1, 1, 1, 1))
sg3maiej

sg3maiej1#

ggpubr::ggarrange()heightswidths参数仅获取每行或每列的相对大小,而不是单个图的大小。来自文档:
宽度
(可选)相对列宽的数值向量。例如,在两列网格中,width = c(2,1)将使第一列的宽度是第二列的两倍。
有一些方法可以解决这个问题:

# Load packages
library(ggplot2)
library(ggpubr)

方法一:合并将一块地和一块空白地合并为一半大小,ggarrange()使用两次。

p1 <- ggplot(iris, aes(x = Sepal.Width, y = Sepal.Length, color = Species)) +
    geom_point()

blank <- ggplot() + geom_blank() + theme_void()
p1_half_size <- ggarrange(
    p1, blank,
    nrow = 2,
    ncol = 1,
    common.legend = TRUE,
    legend = "top"
)
ggarrange(
    p1, p1, p1, p1_half_size,
    labels = "auto",
    nrow = 2,
    ncol = 2,
    common.legend = TRUE,
    legend = "top"
)

工作正常,但它无法合并,嵌套图例指定与common.legend = TRUE。如果你不需要一个普通的图例,那么它工作得很好。

方法二:使用ggplot2::theme()为图添加边距。

p1_bottom_margin <- p1 +
    theme(plot.margin = margin(5.5, 5.5, 100, 5.5))

ggarrange(
    p1, p1, p1, p1_bottom_margin,
    labels = "auto",
    nrow = 2,
    ncol = 2,
    common.legend = TRUE,
    legend = "top"
)

这工作得很好,但是根据您指定导出的打印区域,您可能必须使用试错法来微调边距。

相关问题