查看我的相关问题和接受的答案here。
我正在尝试制作类似于已接受答案中的情节,即网格图,其中共享的共同图例和不同的唯一图例附加到网格上的每个图。
具体来说,我想要一个3行,1列网格,每行有1个绘图。像这样:
使用以下代码生成:
library (ggplot2)
library(gridExtra)
library (grid)
library(cowplot)
diamonds2 <- diamonds[sample(nrow(diamonds), 500), ]
# 3 ggplot plot objects with multiple legends 1 common legend and 3 unique legends
p1<- ggplot(diamonds2, aes(x=price, y= depth, color= clarity , shape= cut )) +
geom_point(size=5) + labs (shape = "unique legend", color = "common legend")
p2 <- ggplot(diamonds2, aes(x=price, y= depth, color= clarity , shape= color )) +
geom_point(size=5) + labs (shape = "unique legend", color = "common legend")
p3 <- ggplot(diamonds2, aes(x=price, y= depth, color= clarity , shape= clarity )) +
geom_point(size=5) + labs (shape = "unique legend", color = "common legend")
cowplot::plot_grid(
cowplot::plot_grid(
p1 + scale_color_discrete(guide = FALSE),
p2 + scale_color_discrete(guide = FALSE),
p3 + scale_color_discrete(guide = FALSE),
nrow=3, ncol = 1))
但是有一个共享的图例,它与每个绘图对象的color =
参数有关。
我已经尝试了以下代码的许多变体,并在咨询cowplot
文档后添加/调整/删除了各种参数/参数,但我无法得到像上面那样的整齐的情节与共享底部的传说(或任何有用的!) - 我尝试的一切都会返回如下所示的拥挤情节。
修改上述代码以包含共享图例:
cowplot::plot_grid(
cowplot::plot_grid(
p1 + scale_color_discrete(guide = FALSE),
p2 + scale_color_discrete(guide = FALSE),
p3 + scale_color_discrete(guide = FALSE),
nrow=3, ncol = 1
),
cowplot::get_legend(p1 + scale_shape(guide = FALSE) + theme(legend.position = "bottom")), nrow=3)
这导致像这样拥挤的情节有很多空白区域:
有人可以建议我哪里出错吗?
答案 0 :(得分:2)
每次拨打plot_grid
都会分割您的绘图区域。在这里,您正在嵌套两个对plot_grid
的调用,并且您要求每行调用3行。 cowplot
因此将绘图区域分成两部分:
您可以指定每个绘图区域的相对高度,为散点图提供更多空间,并为底部的图例指定更少的空间。例如85%的情节和15%的传奇:
cowplot::plot_grid(
cowplot::plot_grid(
p1 + scale_color_discrete(guide = FALSE),
p2 + scale_color_discrete(guide = FALSE),
p3 + scale_color_discrete(guide = FALSE),
ncol = 1, align = "v"
),
cowplot::get_legend(p1 + scale_shape(guide = FALSE) +
theme(legend.position = "bottom")),
ncol=1, rel_heights=c(.85, .15))
产生: