給定數量(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 結果的最左邊緣,幾乎就在那里,但非常繁瑣——而我想象會有一個共同的愿望,即在一組圖的每一個旁邊放置一個文本描述?

uj5u.com熱心網友回復:
我將通過創建僅包含文本的完全空白圖并將其添加到您的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物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/431931.html
上一篇:缺少引數“by”,沒有默認值
