如何使用数值为构面网格中的每个图设置背景色 [英] How to set background color for each plot in a facet grid using numeric values

查看:37
本文介绍了如何使用数值为构面网格中的每个图设置背景色的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想给每个图的背景涂上颜色,以突出显示相关性.整体思路是几个时间序列的自相关矩阵图.

跟随

解决方案

因此,在您的帮助下,我找到了解决方案.首先, dat_text $ R2 列必须为原因数字.添加%符号会将其转换为字符,该字符被解释为离散比例.

  dat_text<-tibble(name1 = rep(names(df),每个= length(names(df))),name2 = rep(names(df),length(names(df))),R2 =圆(as.vector(CM)* 100,1)) 

可以在 geom_text 调用中添加百分号.然后, scale_fill_gradient 调用可以正常工作.我找不到将比例从0%固定为100%的方法,但最终可能会更好.否则,背景颜色之间几乎没有区别.

  p<-ggplot()p<-p + geom_point(数据= FACET,aes(a1,a2),大小= 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(数据= dat_text,aes(填充= 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 = paste0(R2,%"))))p<-p + scale_fill_gradient(低=黑色",高=深绿色",美学=填充")p 

这就是我最终的图表:

I would like to color the background of each individual plot to highlight the correlation. The whole think is an auto-correlation matrix plot of several time series.

Following this, I almost got it work so far as you can easily understand with my super-simplified example:

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

I am looking for the last line to work. It always gives me the default colors.

EDIT:

Code updated; I have mostly strong correlations but I would like to have the color scale spanning from 0% - 100%. This is how it looks now:

解决方案

So, with your help I found a solution. First, the dat_text$R2 column has to be numeric of cause. Adding the % sign converts it to character which is interpreted as discrete scale.

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)
)

The percent sign can be added within the geom_text call. Then, the scale_fill_gradient call works quiet fine. I cannot find to fix the scale from 0% to 100% but in the end this is probably better. Otherwise, there would be almost no difference between the background colors.

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 = paste0(R2,"%")))
p <- p + scale_fill_gradient(low = "black", high = "darkgreen", aesthetics = "fill")
p

This is how my final chart looks like:

这篇关于如何使用数值为构面网格中的每个图设置背景色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆