给定数量(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 结果的最左边缘,它几乎就在那里,但非常繁琐——而我想象会有一个共同的愿望,即在一组图的每一个旁边放置一个文本描述?