我如何使用 colnames 作为 chart.Correlation 的标签,如 corrplot

问题描述

我喜欢 chart.Correlation 中的相关图,但对于多列,名称不可读,并且单个相关图中的值不再那么重要。那么有没有办法定义图表中的标签。与它们在 corrplot 中的关系相关?

library(corrplot)
library(xts)
library(PerformanceAnalytics)

dat <- xts(matrix(rnorm(1000),ncol = 4),order.by = as.Date(1:250))
colnames(dat) <- c("Name1","Name2","Name3","Name4")

cor <- cor(dat)
corrplot(cor,method = "number")
chart.Correlation(dat)

enter image description here

enter image description here

更新:

我得到了一些解决方案,但我坚持 mtext() 的对齐方式

custom.chart.Correlation <- function (R,histogram = TRUE,method = c("pearson","kendall","spearman"),...) 
{
  x = checkData(R,method = "matrix")
  if (missing(method)) 
    method = method[1]
  panel.cor <- function(x,y,digits = 2,prefix = "",use = "pairwise.complete.obs",method = "pearson",cex.cor = 1,...) {
    usr <- par("usr")
    on.exit(par(usr))
    par(usr = c(0,1,1))
    r <- cor(x,use = use,method = method)
    txt <- format(c(round(r,2),0.123456789),digits = digits)[1]
    txt <- paste(prefix,txt,sep = "")
    if (missing(cex.cor)) 
      cex.cor <- 0.8/strwidth(txt)
    test <- cor.test(as.numeric(x),as.numeric(y),method = method)
    # Signif <- symnum(test$p.value,corr = FALSE,na = FALSE,#                  cutpoints = c(0,0.001,0.01,0.05,0.1,1),symbols = c("***",#                                                                           "**","*","."," "))
    #Create a function to generate a continuous color palette
    rbPal <- colorRampPalette(c('red','blue'))
    text(0.5,0.5,cex = cex.cor,col = rbPal(100)[as.numeric(abs(r)*100)])
    # text(0.8,0.8,Signif,cex = cex,col = 2)
  }
  f <- function(t) {
    dnorm(t,mean = mean(x),sd = sd.xts(x))
  }
  dotargs <- list(...)
  dotargs$method <- NULL
  rm(method)
  hist.panel = function(x,... = NULL) {
    par(new = TRUE)
    hist(x,col = "light gray",probability = TRUE,axes = FALSE,main = "",breaks = "FD")
    lines(density(x,na.rm = TRUE),col = "red",lwd = 1)
    rug(x)
  }
  if (histogram) 
    pairs(x,gap = 0,lower.panel = panel.smooth,upper.panel = panel.cor,diag.panel = hist.panel,...)
  else pairs(x,...)
  size = (par("usr")[2] - par("usr")[1])/1.08
  start <- par("usr")[1] + 0.04*size
  end <- par("usr")[2] - 0.04*size
  at <- seq(0.04,1-0.04,length.out = ncol(R)+2)
  mtext(colnames(R),side = 3,at[2:ncol(R)+1] = at,cex = 0.5,las = 2)
}

custom.chart.Correlation(dat,pch = ".",yaxt = 'n',xaxt = 'n',labels = "")

enter image description here

现实世界的例子:

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)