我试图将 9 个地块与一些独特的标签和一些常见的标签合二为一。在另一篇文章中,我被告知要使用拼凑而不是 grid.arrange (因为我对图例有问题),但使用拼凑工作我无法放置所有标签。
这是绘图的代码:
library(ggplot2)
df <- data.frame(
index = 1:21,
corr = c(0.10470688, 0.10827255, 0.12322448, 0.11887717, 0.12719741, 0.12635607, 0.13427974,
0.13539245, 0.13636687, 0.13834174, 0.13864013, 0.13816236, 0.13640052, 0.13775515,
0.13563827, 0.13968726, 0.12499506, 0.11836173, 0.11097081, 0.09829338, 0.10470688),
group = c(rep("Group A", 14), rep("Group B", 7))
)
p1 <- ggplot(df) +
aes(x = index, y = corr, shape = group) +
geom_point(size = 2) +
theme_light()
library(patchwork)
p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 +
plot_layout(ncol = 3, nrow = 3, guides = "collect")
但是具体的标签我不知道怎么贴。在这里你可以看到我是如何使用 grid.arrange 做到这一点的:
library(ggplot2)
library(gridExtra)
library(grid)
library(lattice)
t <- textGrob("Proportion of S1>S2 on Variable1")
lay <- rbind(c(1,2,3),
c(1,2,3),
c(1,2,3),
c(1,2,3),
c(1,2,3),
c(1,2,3),
c(1,2,3),
c(4,4,4),
c(5,6,7),
c(5,6,7),
c(5,6,7),
c(5,6,7),
c(5,6,7),
c(5,6,7),
c(5,6,7),
c(8,8,8),
c(9,10,11),
c(9,10,11),
c(9,10,11),
c(9,10,11),
c(9,10,11),
c(9,10,11),
c(9,10,11),
c(12,12,12))
grid.arrange (arrangeGrob (p1, top="High w", left="High p correlation")
,arrangeGrob(p1,top="Medium w correlation")
,arrangeGrob(p1,top="Low w correlation")
,arrangeGrob(t)
,arrangeGrob(p1, left="Medium p correlation")
,arrangeGrob(p1)
,arrangeGrob(p1)
,t
,arrangeGrob(p1, left="Low p correlation")
,arrangeGrob(p1)
,arrangeGrob(p1)
,t
, ncol=3,nrow=24,top="Title", layout_matrix=lay)
但是我需要使用 pachwork 来实现共享图例,而不是每个情节都有 9 个图例。
有没有办法像我在 grid.arrange 中那样在拼凑中添加标签?
我已经看到了grind.arrange的这个函数来提取共享图例,但我无法在我的示例中使用它:
grid_arrange_shared_legend <- function(...) {
plots <- list(...)
g <- ggplotGrob(plots[[1]] + theme(legend.position="bottom"))$grobs
legend <- g[[which(sapply(g, function(x) x$name) == "guide-box")]]
lheight <- sum(legend$height)
grid.arrange(
do.call(arrangeGrob, lapply(plots, function(x)
x + theme(legend.position="none"))),
legend,
ncol = 1,
heights = unit.c(unit(1, "npc") - lheight, lheight))
}
它在这里工作:
grid_arrange_shared_legend(p1, p1, p1, p1)
但我不能让它在这里工作:
grid.arrange (arrangeGrob (p1, top="High w", left="High p correlation")
,arrangeGrob(p1,top="Medium w correlation")
,arrangeGrob(p1,top="Low w correlation")
,arrangeGrob(t)
,arrangeGrob(p1, left="Medium p correlation")
,arrangeGrob(p1)
,arrangeGrob(p1)
,t
,arrangeGrob(p1, left="Low p correlation")
,arrangeGrob(p1)
,arrangeGrob(p1)
,t
, ncol=3,nrow=24,top="Title", layout_matrix=lay)
有任何想法吗?非常感谢您,非常感谢您在本论坛中提供的所有帮助和支持。
带着所有美好的祝愿,