使用拼凑将组合子图(拼凑?)注释为单个图

问题描述 投票:0回答:2

我正在尝试弄清楚如何注释组合的拼凑作品,就好像它们是单独的图一样。

我有一个拼凑而成的作品,由三个组合地块和另一个单一地块组成。最终的复合图是顶部的第一个拼凑物和底部的单独图。我可以毫无问题地获得我想要的布局,但是当我使用

plot_annotation
时,它会为每个图提供字母,而我想看到的是顶部图(三个子图拼凑而成)的 A 和 B 表示最下面的一个(只有一个图)

这是我目前正在做的事情:

library(ggplot2)
library(patchwork)

p1 <- ggplot(mtcars) + 
  geom_point(aes(mpg, disp)) + 
  ggtitle('Plot 1')

p2 <- ggplot(mtcars) + 
  geom_boxplot(aes(gear, disp, group = gear)) + 
  ggtitle('Plot 2')

p3 <- ggplot(mtcars) + 
  geom_point(aes(hp, wt, colour = mpg)) + 
  ggtitle('Plot 3')

p4 <- ggplot(mtcars) + 
  geom_bar(aes(gear)) + 
  facet_wrap(~cyl) + 
  ggtitle('Plot 4')

top_plot = (p1 + p2 + p3)
bottom_plot = p4
combined_plot <- (top_plot / bottom_plot) + plot_annotation(tag_levels="A")
combined_plot

我希望看到的不是 A-D 注释,而是顶部图(图 1-3)的 A 和底部图(图 4)的 B。有办法做到这一点吗?

r ggplot2 plot graphics patchwork
2个回答
8
投票

一种解决方案是创建两个完整的拼凑图,每个图都有自己的注释。您必须将它们分别放入

wrap_elements
中以将它们声明为完整的拼凑物才能正常工作。此后,您可以像组合 ggplots 一样组合它们:

# Set theme for annotations
thm <- theme(plot.title = element_text(face = 2, size = 16))

top_plot      <- wrap_elements((p1 + p2 + p3) + 
                                 plot_annotation(title = "A", theme = thm))
bottom_plot   <- wrap_elements(p4 + plot_annotation(title = "B", theme = thm))

top_plot / bottom_plot

enter image description here


0
投票

另一种选择是,当您想“跳过”枚举时,将

... + plot_layout(tag_level = 'new')
与绘图一起使用(最初发布在此 github issue 中)。

library(ggplot2)
library(patchwork)

p1 <- ggplot(mtcars) + 
  geom_point(aes(mpg, disp)) + 
  ggtitle('Plot 1')

p2 <- ggplot(mtcars) + 
  geom_boxplot(aes(gear, disp, group = gear)) + 
  ggtitle('Plot 2') +
  plot_layout(tag_level = 'new')

p3 <- ggplot(mtcars) + 
  geom_point(aes(hp, wt, colour = mpg)) + 
  ggtitle('Plot 3') +
  plot_layout(tag_level = 'new')

p4 <- ggplot(mtcars) + 
  geom_bar(aes(gear)) + 
  facet_wrap(~cyl) + 
  ggtitle('Plot 4')

top_plot = (p1 + p2 + p3)
bottom_plot = p4
combined_plot <- (top_plot / bottom_plot) + plot_annotation(tag_levels="A")
combined_plot

我在这里添加这个解决方案是因为在某些情况下

wrap_elements
会扭曲我的图的面板(不知道为什么),所以艾伦的解决方案对我来说不太有效。

© www.soinside.com 2019 - 2024. All rights reserved.