将ggplot2中的图例与拼凑而成

agi*_*ila 6 r ggplot2 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
Run Code Online (Sandbox Code Playgroud)

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

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

p1 + p2 + plot_layout(guides = "collect")
Run Code Online (Sandbox Code Playgroud)

reprex 包(v0.3.0)于 2020 年 4 月 7 日创建

teu*_*and 11

我认为只有当两个图例具有完全相同的属性时才能组合在一起,即共享限制、标签、中断等。您可以通过共享一个通用比例来提供一个通用图例,拼凑而成的一种方法是使用&运算符,哪种意思是“将此应用于所有以前的图”:

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

在此处输入图片说明

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