将 ggplot2 中的图例与拼凑而成

Combine and merge legends in ggplot2 with patchwork

我想合并两个或多个情节,合并他们的传说。

比如我可以创建一些数据和两个场景如下。

# packages
library(ggplot2)
library(patchwork)

# first plot
set.seed(07042020)
x <- runif(50)
y <- runif(50)
data1 <- data.frame(x = x, y = y, z = runif(50, 0, 2))
p1 <- ggplot(data1) + geom_point(aes(x, y, col = z))
p1

data2 <- data.frame(x = x, y = y, z = runif(50, -1, 1))
p2 <- ggplot(data2) + geom_point(aes(x, y, col = z))
p2

以下代码是我迄今为止尝试过的代码,但这不是预期的结果。我想将这两个图合并为一个图例,即创建一个独特且通用的图例 "z",使两个图的点根据这个通用图例着色。这可能吗?

p1 + p2 + plot_layout(guides = "collect")

reprex package (v0.3.0)

于 2020-04-07 创建

我知道你想要完成什么并且很幸运。也许,R 将这些解读为两个独立的传说。你能尝试手动编辑每个图例(即使保持原样"z"),然后使用拼凑来组合吗?

我尝试过的另一项故障排除是尝试重新安排您的代码以确保正确读取所有内容:

(p1 + p2) + plot_layout(guides = "collect")

我认为两个图例只有在具有完全相同的属性时才能组合,例如共享限制、标签、中断等。 您可以通过共享一个通用比例来提供一个通用图例,在拼凑中做到这一点的一种方法是使用 & 运算符,这意味着 'apply this to all previous plots':

p1 + p2 + plot_layout(guides = "collect") & 
  scale_colour_continuous(limits = range(c(data1$z, data2$z)))

唯一的缺点是您可能必须手动指定限制,因为 p1 中的比例不知道 p2 中的值。