2

我有一个包含 5 个图和一个共享图例的面板,我想将其排列在(2 行,3 列)网格中。右下角的面板应该用于图例。

library(ggplot2)
library(cowplot)
df <-data.frame(a=seq(1,20),b=seq(1,20), c=as.factor(c(rep("A", 10),rep("B",10))))
O <- ggplot(df, aes(x = a, y = b)) + geom_point(aes(col=c))
legend <- get_legend(O)

A <- ggplot(df, aes(x = a, y = b)) + geom_point(aes(col=c), show.legend = F)
B <- ggplot(df, aes(x = c, y = b)) + geom_boxplot(aes(col=c), show.legend = F)
C <- ggplot(df, aes(x = a, y = b)) + geom_line(aes(group=c, col=c), show.legend=F)
D <- ggplot(df, aes(a)) + geom_histogram()



lol <- plot_grid(A, B, C,
                 D, A, NULL, ncol=3, nrow=2, 
                 align="hv", rel_widths = c(1, 1, 1, 1, 1, 1),
                 labels = c('A', 'B', 'C', 'D', 'E', ''))

这遵循此处给出的教程: https ://cran.r-project.org/web/packages/cowplot/vignettes/shared_legends.html

现在的问题是,我在小插图中修改了最后一个绘图命令:

lol + draw_grob(legend, 2/3.3, 0, .3/3.3, 1)

但我无法掌握 draw_grob 参数中给出的(明显?)坐标系的逻辑。有人可以澄清如何将图例导航到空白点吗?

请注意,我不能在“plot_grid”中使用对象“legend”,因为它会阻止对齐工作。

4

1 回答 1

1

您需要将其视为一个矩形,点 ( x, y) 为左下角,右上角为 ( x+ width ,y +height`)。

所以,在这种情况下:

lol + draw_grob(legend, 2/3, 0, 1/3, 0.5)

在此处输入图像描述

请注意,您可能需要增加y一点以使其与其他绘图的实际绘图区域保持一致,而不是整个画布。

于 2017-01-10T14:06:17.987 回答