在 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
对象。
给定数量 (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
对象。