我如何使用 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

解决方法

使用不同的包来创建绘图是可行的。 GGally 使用了许多 ggplot 功能。

library(GGally)
lowerFn <- function(data,mapping,method = "lm",...) {
  p <- ggplot(data = data,mapping = mapping) +
    geom_point(colour = "black") +
    geom_smooth(method = method,color = "red",...)
  p
}


ggpairs(dat,lower=list(continuous = wrap(lowerFn,method = "lm")),upper = list(continuous = "cor"),diag=list(discrete= "barDiag"),axisLabels='none') +
  theme_bw() +
  theme(strip.text = element_text(angle=90,hjust=1),strip.background = element_rect(fill = NA),strip.text.y = element_blank(),panel.grid.major = element_blank(),panel.grid.minor = element_blank())

产生你喜欢的 corrolationmatrix 和 corrplot 中的标签。 For a nice example also see this question

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...