1

在此处查看我的相关问题和接受的答案。

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

具体来说,我想要一个 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)

这会导致这样一个拥挤的地块,有很多空白空间:

在此处输入图像描述

任何人都可以建议我可能会出错的地方吗?

4

1 回答 1

3

每次调用都会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))

产生:

在此处输入图像描述

于 2017-10-20T11:56:18.293 回答