0

给定数量(4)个相同尺寸的 ggplot 对象,当将它们组合成一个图作为 1 列图时,我希望在每个图的左侧都有自定义文本。在cowplot、ggarrange、patchwork 等软件包的帮助下,组合这些图很容易——在每个图旁边添加一个标签字母,例如“A”“B”也很容易。但是在每个图的左侧添加更长的文本很困难。

首先我尝试使用 Patchwork,tag_suffix 如下,但它只显示所有四个图的第一个标签:

(下面的替代通用图)

library(patchwork)
var_titles <- c('Study Design',
'Type of data',
'Source of data',
'Internal validity rating')
p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp))
p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
p3 <- ggplot(mtcars) + geom_point(aes(mpg, disp))
p4 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
p1 + p2 + p3 + p4 +
plot_layout(nrow = 4) +
plot_annotation(tag_levels = '1', tag_suffix = var_titles)

然后我在 Cowplot 中尝试,并通过在左侧插入一个带有 NULL 空白图的额外列,它在左侧为我的标签腾出了空间,但是定位很困难,并且字符串内的换行符 \n 失败。

library(cowplot)
var_titles <- c('Study Design', 
                'Type of data', 
                'Source of data', 
                'Internal validity rating')
row_1 <- plot_grid(NULL, p1,
                   nrow=1, ncol=2,
                   rel_widths = c(543/3543, 3000/3543),
                   labels = var_titles[1],
                   label_x = c(-0.3),
                   label_y = c(0.6))
row_2 <- plot_grid(NULL, p2,
                   nrow=1, ncol=2,
                   rel_widths = c(543/3543, 3000/3543),
                   labels = var_titles[2],
                   label_x = c(-0.3),
                   label_y = c(0.6))
row_3 <- plot_grid(NULL, p3,
                   nrow=1, ncol=2,
                   rel_widths = c(543/3543, 3000/3543),
                   labels = var_titles[3],
                   label_x = c(-0.4),
                   label_y = c(0.6))
row_4 <- plot_grid(NULL, p4,
                   nrow=1, ncol=2,
                   rel_widths = c(543/3543, 3000/3543),
                   labels = var_titles[4],
                   label_x = c(0),
                   label_y = c(0.5))

thisPlot <- plot_grid(row_1, row_2, row_3, row_4,
                      nrow = 4,
                      rel_heights = c(7/29, 7/29, 7/29, 8/29))
thisPlot

实际的图是单个水平堆叠的条,每个用于显示比例的不同变量(每个变量有一组不同的类别,这就是为什么我首先单独绘制它们,而不是仅仅制作一组堆叠条)。

请对另一种方法提出任何建议-我也尝试过 ggarrange 但尚未尝试 gridExtra 的 grid.arrange

截图是(1)快速伪造版本,以显示组合情节的目标,标签将在左侧的空白处;(2)到目前为止我得到的拼凑而成的东西;(3) Cowplot 结果的最左边缘,它几乎就在那里,但非常繁琐——而我想象会有一个共同的愿望,即在一组图的每一个旁边放置一个文本描述?

图的目标模型 拼凑标签仅重复​​第一个标签 只有 Cowplot 的左边缘,标签在那里,但需要打破 2 或 3 行

4

1 回答 1

1

我将通过创建仅包含文本的完全空白图并将其添加到您的patchwork设计中来处理此问题。一个小功能可以减少代码的重复性:

label_plot <- function(label) {
  ggplot() + 
    geom_text(aes(x = 0, y = 0, label = label), size = 6, fontface = 2) + 
    theme_void()
}

所以现在你可以这样做:

 label_plot("1 Study\nDesign") + p1 +
 label_plot("2 Study\nDesign") + p2 + 
 label_plot("3 Study\nDesign") + p3 +
 label_plot("4 Study\nDesign") + p4 +
 plot_layout(nrow = 4, widths = c(1, 4))

在此处输入图像描述

当然,您可以完全自由地更改每个标签文本的大小、颜色、字体和位置,因为每个标签本身就是一个完整的ggplot对象。

于 2022-02-24T17:06:02.437 回答