R 如何使用数值为镶嵌面栅格中的每个绘图设置背景色

R 如何使用数值为镶嵌面栅格中的每个绘图设置背景色,r,ggplot2,facet-grid,R,Ggplot2,Facet Grid,我想给每个情节的背景上色,以突出相关性。整个思路是几个时间序列的自相关矩阵图 以下是我的超级简化示例,您可以很容易地理解,我几乎成功了: library(tidyverse) set.seed(214) n <- 1000 df <- tibble(v1 = runif(n), v2 = runif(n)*0.1 + v1, v3 = runif(n)*0.2 + v2, v4 = runif(n)*0.3 + v3, v5 = runif(n)*0.4 + v4, v6 = ru

我想给每个情节的背景上色,以突出相关性。整个思路是几个时间序列的自相关矩阵图

以下是我的超级简化示例,您可以很容易地理解,我几乎成功了:

library(tidyverse)
set.seed(214)

n <- 1000
df <- tibble(v1 = runif(n), v2 = runif(n)*0.1 + v1, v3 = runif(n)*0.2 + v2, v4 = runif(n)*0.3 + v3, v5 = runif(n)*0.4 + v4, v6 = runif(n)*0.5 + v5)

C                   <- crossing(w1 = 1:length(df), w2 = 1:length(df))    # Alle Kombinationsmöglichkeiten
CM                  <- array(0, dim = c(length(df), length(df)))   #Correlation Matrix

FACET_LIST <- lapply(1:nrow(C), function(c) { # c <- 14   C[c,]
  tibble(a1 = unlist(df[, C$w1[c]], use.names = FALSE), 
         a2 = unlist(df[, C$w2[c]], use.names = FALSE), 
         name1 = names(df[, C$w1[c]]),
         name2 = names(df[, C$w2[c]])
  )
})

FACET <- do.call(rbind.data.frame, FACET_LIST)

FACET$name1 <- as_factor(FACET$name1)
FACET$name2 <- as_factor(FACET$name2)

for (i in seq_along(df)) {
  for (j in seq_along(df)) {
    CM[i,j] <- cor(df[i], df[j], use = "complete.obs")
  }
}

dat_text <- data.frame(
  name1 = rep(names(df), each = length(names(df))), 
  name2 = rep(names(df), length(names(df))), 
  R2 = paste(round(as.vector(CM) * 100, 1), "%")
)

p <- ggplot()
p <- p + geom_point(data=FACET, aes(a1, a2), size = 0.5)
p <- p + stat_smooth(data=FACET, aes(a1, a2), method = "lm")
p <- p + facet_grid(vars(name1), vars(name2)) + coord_fixed()
p <- p + geom_rect(data = dat_text, aes(fill = R2), xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf, alpha = 0.3)
p <- p + geom_text(data = dat_text, aes(x = 0.3, y = 1.2, label = R2))
p <- p + scale_fill_brewer(palette = "Greens")

p
库(tidyverse)
种子集(214)

所以,在你的帮助下,我找到了一个解决办法。首先,
dat_text$R2
列必须是原因数字。添加%符号会将其转换为被解释为离散比例的字符

dat_text <- tibble(
  name1 = rep(names(df), each = length(names(df))), 
  name2 = rep(names(df), length(names(df))), 
  R2 = round(as.vector(CM) * 100, 1)
)
这是我的最终图表的样子:
因此,在你的帮助下,我找到了一个解决办法。首先,
dat_text$R2
列必须是原因数字。添加%符号会将其转换为被解释为离散比例的字符

dat_text <- tibble(
  name1 = rep(names(df), each = length(names(df))), 
  name2 = rep(names(df), length(names(df))), 
  R2 = round(as.vector(CM) * 100, 1)
)
这是我的最终图表的样子:

关于此代码,我还有另一个问题。由于我正在处理更多的数据,我想问一下,是否有可能使其更快。它通过将
n
设置为一百万而变得越来越近。因此,我不确定我是否应该提出另一个问题,或者把这个问题放在这个问题中,或者干脆把它放在评论(?)中。非常感谢你的帮助!这是因为您使用的是
scale\u color\u brewer
,您需要
scale\u fill\u brewer
(您有
fill=R2
)关于您的后续行动,这应该是一个单独的问题,因为它完全超出了上述关于使用颜色进行绘图的问题的范围。谢谢,但我得到了警告:
在RColorBrewer::brewer.pal(n,pal)中:n太大,调色板绿色允许的最大值是9,返回您要求的调色板,颜色太多
,并且颜色不是真正连续的。对不起,我的语言,看起来色阶是从80%左右开始的。是否有可能将刻度固定在0%-100%?我刚刚发现:布鲁尔刻度是经过仔细设计的,并在离散数据上进行了测试。它们的设计并不是为了扩展到连续数据,但结果通常看起来不错。您的里程可能会有所不同。我需要一个连续的刻度,因为我真的想表示相关值。它不需要是
RColorBrewer
。关于这段代码,我还有另一个问题。由于我正在处理更多的数据,我想问一下,是否有可能使其更快。它通过将
n
设置为一百万而变得越来越近。因此,我不确定我是否应该提出另一个问题,或者把这个问题放在这个问题中,或者干脆把它放在评论(?)中。非常感谢你的帮助!这是因为您使用的是
scale\u color\u brewer
,您需要
scale\u fill\u brewer
(您有
fill=R2
)关于您的后续行动,这应该是一个单独的问题,因为它完全超出了上述关于使用颜色进行绘图的问题的范围。谢谢,但我得到了警告:
在RColorBrewer::brewer.pal(n,pal)中:n太大,调色板绿色允许的最大值是9,返回您要求的调色板,颜色太多
,并且颜色不是真正连续的。对不起,我的语言,看起来色阶是从80%左右开始的。是否有可能将刻度固定在0%-100%?我刚刚发现:布鲁尔刻度是经过仔细设计的,并在离散数据上进行了测试。它们的设计并不是为了扩展到连续数据,但结果通常看起来不错。您的里程可能会有所不同。我需要一个连续的刻度,因为我真的想表示相关值。它不需要是
RColorBrewer