在 R 中的 1 列图网格旁边的自定义标签

custom labels beside a 1-column grid of plots, in R

给定数量 (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 空白图,它在左侧为我的标签制作了 space, 但定位很难,字符串内的换行符 \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) 快速伪造版本,以显示组合情节的目标,标签将在左侧空白 space; (2) 到目前为止,我从拼凑中得到了什么; (3) Cowplot 结果的最左边,它几乎就在那里,但非常繁琐 - 而我想象会有一个共同的愿望,即在一组图的每一个旁边放置一个文本描述?

我会通过创建只有文本的完全空白图并将它们添加到您的 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 对象。