如何用拼凑而成的多面图左对齐?

Posted

技术标签:

【中文标题】如何用拼凑而成的多面图左对齐?【英文标题】:How to left-align faceted-plots with patchwork? 【发布时间】:2021-11-07 07:17:58 【问题描述】:

我有两个facet_wrap 图,我想垂直组合并左对齐拼凑。我的问题是两个图之间的列数不相等(如下面的简单示例所示)。

有没有办法让这些图左对齐拼凑?

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

plot_ls <- data.frame(var_a = c(rep(1, 5), rep(2, 4)),
                 var_b = c(letters[1:5], letters[c(1:2, 4:5)]),
                 var_x = "a",
                 var_y = rnorm(9),
                 var_color = "b") %>%
  split(.$var_a) %>%
  imap(function(df.x, var_a.x) 
    ggplot(data = df.x) +
      geom_point(aes(x = var_x, y = var_y, color = var_color)) +
      facet_wrap(var_b ~ ., scales = "free", nrow = 2) +
      ylab(var_a.x) +
      theme(aspect.ratio = 1,
            axis.title.x = element_blank(),
            plot.margin = margin(1,1,1,1))
  )

# ...centered, not aligned to the left...
plot_ls[[1]] + plot_ls[[2]] +
         plot_layout(ncol = 1,
                     guides = 'collect') & 
         theme(legend.position = 'bottom')

【问题讨论】:

如果您使用设计参数来进行绘图布局,您可以通过调整绘图的宽度,让所有内容都对齐。我尝试了` layout plot_layout(design = layout,... 【参考方案1】:

这个问题可能与想要设置aspect.ratio = 1 有关,如果我还想控制对齐和尺寸,may not be possible with patchwork。我可以通过删除aspect.ratio = 1 来左对齐,并通过调整设计来获得接近对齐的方面(根据@RichardTelford 的评论):

plot_ls <- data.frame(var_a = c(rep(1, 5), rep(2, 4)),
                 var_b = c(letters[1:5], letters[c(1:2, 4:5)]),
                 var_x = "a",
                 var_y = rnorm(9),
                 var_color = "b") %>%
  split(.$var_a) %>%
  imap(function(df.x, var_a.x) 
    ggplot(data = df.x) +
      geom_point(aes(x = var_x, y = var_y, color = var_color)) +
      facet_wrap(var_b ~ ., scales = "free", nrow = 2) +
      ylab(var_a.x) +
      theme(# aspect.ratio = 1,
            axis.title.x = element_blank(),
            plot.margin = margin(1,1,1,1))
  )

# ...centered, not aligned to the left...
plot_ls[[1]] + plot_ls[[2]] +
         plot_layout(design = "
                         AAAAAA
                         BBBB##
                         ",
                     guides = 'collect') & 
         theme(legend.position = 'bottom')

【讨论】:

以上是关于如何用拼凑而成的多面图左对齐?的主要内容,如果未能解决你的问题,请参考以下文章

对齐多面图和图例

如何将普通的ggplot与cowplot中的多面对齐?

同时下载和播放由多个 URL 拼凑而成的歌曲

2星|《锁脑》:没有实际工作经验和研究成果的写手拼凑而成的理论

如何在 Plotly 中制作多面图有自己的 YAxes 刻度标签?

2星|《深度社交》:疑似没有实际工作经验的枪手拼凑而成