【问题标题】:Aligning and scaling ggplots with patchwork使用拼凑对齐和缩放 ggplots
【发布时间】:2021-12-27 19:18:52
【问题描述】:

我正在尝试使用 patchwork 包将一些地块组合成一个地块,但我不熟悉它,并且无法弄清楚如何正确缩放地块的大小。有一个核心图,散点图,然后是每个连续变量的箱线图,以及一些分布。下面是一个可重现的示例:

library(dplyr)
library(ggplot2)
library(patchwork)

set.seed(100)
dat1 <- tibble(x = runif(1000, 0, 10),
               y = runif(1000, 0, 20),
               group1 = sample(rep(letters[1:5], each = 200)),
               group2 = sample(rep(letters[-22:-1], each = 250)))

plot1 <- ggplot(data = dat1) +
  geom_point(aes(x = x, y = y, color = group1)) +
  facet_wrap(~group2) +
  theme(legend.position = 'bottom')

xbox <- ggplot(data = dat1) +
  geom_boxplot(aes(x = x, y = group1, fill = group1, color = group1)) +
  scale_x_continuous(position = 'top') +
  theme(legend.position = 'none',
        axis.title.y = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        title = element_blank())

ybox <- ggplot(data = dat1) +
  geom_boxplot(aes(x = group1, y = y, fill = group1, color = group1)) +
  scale_y_continuous(position = 'right') +
  theme(legend.position = 'none',
        axis.title.x = element_blank(),
        axis.text.x = element_blank(),
        axis.ticks.x = element_blank(),
        title = element_blank())

(xbox + plot_spacer()) / (plot1 + ybox)

这与我尝试的很接近,但箱线图需要重新调整比例,以使顶部的大约是其显示高度的 20%,而右侧的大约是其显示宽度的 20%。我尝试使用patchwork::plot_layout 来处理缩放,但我不断得到意想不到的结果。我插入了patchwork::plot_spacer(),这样右侧的箱线图就不会拉伸图片的整个高度,但也许有更好的方法来做到这一点。箱线图应该看起来更像轴,所以右上角的空白不应该真的存在。

【问题讨论】:

    标签: r ggplot2 patchwork


    【解决方案1】:

    我不确定您是否会得到一个在边距中具有推理意义的图,但是您可以使用 heightswidths 参数或design 参数。请注意,括号中的图本身被视为“子图”,并且在使用plot_layout 时被赋予了自己的“区域”。因此,我将所有地块添加在一起,而不是使用其他拼凑运算符来排列它们。

    xbox + plot_spacer() + plot1 + ybox + plot_layout(design = c(area(t = 1, b = 1, l = 1, r = 6), # <== top column
                                                                 area(t = 1, b = 1, l = 7, r = 7), # <== top right
                                                                 area(t = 2, b = 7, l = 1, r = 6), # <== bottom left
                                                                 area(t = 2, b = 7, l = 7, r = 7)  # <== bottom right
                                                                 ))
    # Alternative:
    xbox + plot_spacer() + plot1 + ybox + plot_layout(ncol = 2, nrow = 2, 
                                                      heights = c(1, 6),
                                                      widths = c(6, 1))
    
    

    【讨论】:

    • 成功了。感谢您解释拼凑的工作原理。似乎创建这些“子图”是导致它产生意外结果的原因。
    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 2021-06-15
    • 2020-04-09
    • 2021-05-16
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 2012-01-31
    相关资源
    最近更新 更多