[英]Share a continuous value-color mapping across several ggplots
我想在 ggplot 中制作 4 個並排的散點圖。 在每個圖中,我用一個連續變量為點着色。 我希望在四個圖中將相同的值映射到相同的顏色,以便我可以比較這些圖並使用一個共同的圖例。 有什么建議? 我嘗試了 scale_colour_gradientn() 並嘗試了“價值觀”的爭論,但到目前為止無濟於事。
下面是四張圖:
library(tidyverse)
library(gridExtra)
set.seed(111)
n <- 100
X1 <- rnorm(n, mean=0,sd=2)
X2 <- rnorm(n, mean=0,sd=2)
y <- rnorm(100, mean=10*(X1 < -1) - 10*(X1 > -1) +
15*(X1 > -1 & X2 > 2), sd=1)
y0 <- rnorm(100, mean=10*(X1 < -1) - 10*(X1 > -1), sd=1)
y40 <- rnorm(100, mean=10*(X1 < -1) - 10*(X1 > -1) +
40*(X1 > -1 & X2 > 2), sd=1)
y20 <- rnorm(100, mean=10*(X1 < -1) - 20*(X1 > -1) +
15*(X1 > -1 & X2 > 2), sd=1)
p1 <- ggplot(data=NULL) + geom_point(aes(x=X1, y=X2, col=y)) +
scale_colour_gradientn(colours = hcl.colors(8, "BluGrn"))
p2 <- ggplot(data=NULL) + geom_point(aes(x=X1, y=X2, col=y0)) +
scale_colour_gradientn(colours = hcl.colors(8, "BluGrn"))
p3 <- ggplot(data=NULL) + geom_point(aes(x=X1, y=X2, col=y40)) +
scale_colour_gradientn(colours = hcl.colors(8, "BluGrn"))
p4 <- ggplot(data=NULL) + geom_point(aes(x=X1, y=X2, col=y20)) +
scale_colour_gradientn(colours = hcl.colors(8, "BluGrn"))
grid.arrange(p1,p2,p3,p4, nrow=2)
關於如何創建可在 y、y0、y40 和 y20 之間共享的值-> 顏色連續映射的任何建議將不勝感激。 謝謝!
Axeman 的方法是正確的,盡管我認為發布帶有拼湊而成的方法而不是 gridExtra 的方法可能會有所幫助。 您可以使用&
運算符將 ggplot 對象(通常是比例或主題)應用於所有先前的繪圖。 要“收集”指南,它們必須共享相同的名稱、限制、中斷、顏色等,因此您必須設置name
參數以覆蓋默認值。
values
參數確實可以用來控制顏色的傳播。 需要記住的是,ggplot2 在應用顏色之前將values
重新縮放到 [0,1] 區間,並且values
參數也對這些重新縮放的值進行操作。 對於您選擇的 8 種顏色,它們將位於scales::rescale(seq(0, 1, length.out = 8))
。 要使中間值更靠近,您可以嘗試使用values = c(0, seq(0.2, 0.8, length.out = 6), 1)
。
library(tidyverse)
library(patchwork)
set.seed(111)
n <- 100
X1 <- rnorm(n, mean=0,sd=2)
X2 <- rnorm(n, mean=0,sd=2)
y <- rnorm(100, mean=10*(X1 < -1) - 10*(X1 > -1) +
15*(X1 > -1 & X2 > 2), sd=1)
y0 <- rnorm(100, mean=10*(X1 < -1) - 10*(X1 > -1), sd=1)
y40 <- rnorm(100, mean=10*(X1 < -1) - 10*(X1 > -1) +
40*(X1 > -1 & X2 > 2), sd=1)
y20 <- rnorm(100, mean=10*(X1 < -1) - 20*(X1 > -1) +
15*(X1 > -1 & X2 > 2), sd=1)
p1 <- ggplot(data=NULL) + geom_point(aes(x=X1, y=X2, col=y))
p2 <- ggplot(data=NULL) + geom_point(aes(x=X1, y=X2, col=y0))
p3 <- ggplot(data=NULL) + geom_point(aes(x=X1, y=X2, col=y40))
p4 <- ggplot(data=NULL) + geom_point(aes(x=X1, y=X2, col=y20))
p1 + p2 + p3 + p4 + plot_layout(guides = "collect") &
scale_colour_gradientn(colours = hcl.colors(8, "BluGrn"),
limits = range(y, y0, y40, y20),
values = c(0, seq(0.2, 0.8, length.out = 6), 1),
name = "Values")
由reprex 包(v0.3.0) 於 2020 年 11 月 25 日創建
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.