R 'cowplot' 整齐地生成具有共享(公共)图例和独特图例的网格图
R 'cowplot' neatly produce gridded plot with shared (common) legends and unique legends
查看我的相关问题和已接受的答案。
我正在尝试生成一个类似于已接受答案中的图,即网格图,具有共享的公共图例和附加到网格上每个图的不同的独特图例。
具体来说,我想要一个 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 =
参数相关的共享图例。
我已经尝试了以下代码的许多变体,并且 added/adjusted/removed 各种 arguments/parameters 参考了 cowplot
文档,但我无法得到像上面那样的整洁图底部的共享图例(或任何有用的地方!)-我尝试过的一切 returns 如下所示的拥挤情节。
修改以上代码以包含共享图例:
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)
这导致像这样的拥挤的情节有很多空的space:
谁能告诉我哪里可能出错了?
每次调用 plot_grid
都会拆分您的绘图区域。在这里,您嵌套了对 plot_grid
的两个调用,并且每个调用要求 3 行。 cowplot
因此将绘图区域分成两个相等的部分:
- 在顶部,它显示了您的散点图
- 在底部,您的图例占据第一行,底部两行中没有任何内容会在挤压您的散点图时产生大量空白space。
您可以指定每个绘图区域的相对高度,为散点图提供更多 space,为底部的图例提供更少 space。例如,对于 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))
产生:
查看我的相关问题和已接受的答案
我正在尝试生成一个类似于已接受答案中的图,即网格图,具有共享的公共图例和附加到网格上每个图的不同的独特图例。
具体来说,我想要一个 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 =
参数相关的共享图例。
我已经尝试了以下代码的许多变体,并且 added/adjusted/removed 各种 arguments/parameters 参考了 cowplot
文档,但我无法得到像上面那样的整洁图底部的共享图例(或任何有用的地方!)-我尝试过的一切 returns 如下所示的拥挤情节。
修改以上代码以包含共享图例:
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)
这导致像这样的拥挤的情节有很多空的space:
谁能告诉我哪里可能出错了?
每次调用 plot_grid
都会拆分您的绘图区域。在这里,您嵌套了对 plot_grid
的两个调用,并且每个调用要求 3 行。 cowplot
因此将绘图区域分成两个相等的部分:
- 在顶部,它显示了您的散点图
- 在底部,您的图例占据第一行,底部两行中没有任何内容会在挤压您的散点图时产生大量空白space。
您可以指定每个绘图区域的相对高度,为散点图提供更多 space,为底部的图例提供更少 space。例如,对于 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))
产生: