2017-10-20 126 views
1

看到我的相关问题和接受的答案hereR'cowplot'整齐地产生与共享(共同)传说和独特传说的网格情节

我正在尝试生成一个类似于接受答案中的情节,即具有共享常见图例和附加到网格上每个图的不同独特图例的网格图。

具体来说,我想要一个3行,1列网格,每行有1个图。像这样:

enter image description here

制备用下面的代码,其中:

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) 

其中有很多的空白导致拥挤的情节是这样的:

enter image description here

可能有人建议在那里我可能会出错?

回答

1

每次致电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)) 

主要生产:

enter image description here

+0

啊 - 它现在是明显的。非常清楚地解释,谢谢。我已经编辑了你的答案,以包含最终的情节,我希望你不介意。 –