【问题标题】:How to set R corrplot diagonal numeric labels?如何设置 R corrplot 对角线数字标签?
【发布时间】:2017-03-22 13:20:01
【问题描述】:

我想在对角线上获得标签,如图 3 所示,但使用 corrplot,如图 1-2 所示。 我正在研究 corrplot 手册 here 的数字对角线标签。 我不知道有任何方法可以将数字标签放在corrplot 对角线上,因为我设法伪造了所有可能的选择。 伪造的东西

  • 函数cor.mtest中的以下行不能设置数字对角线标签

    colnames(p.mat) <- rownames(p.mat) <- colnames(mat) <- diag.labels
    
  • colorlegend 显然不是这里的正确选择

    corrplot(...)
    colorlegend(colbar = grey(1:100 / 100), labels=ids, addlabels = TRUE)
    

部分事情很高兴知道更多但不限制我们

  • diag=FALSE, tl.pos="d" 用于单个单元格。您如何为 N 个单元格制作tl.pos="d"? - - tl.pos=c("d") 会导致错误。 - - tl.pos 是数字对角线标签所必需的吗?

代码以及 here 用于不同示例,其中包含 K.J.J.K 的第一个答案的提议作为测试用例,但对于该任务显示为错误

library("corrplot")

# http://www.sthda.com/english/wiki/visualize-correlation-matrix-using-correlogram
cor.mtest <- function(mat, diag.labels, ...) {
    mat <- as.matrix(mat)
    n <- ncol(mat)
    p.mat<- matrix(NA, n, n)
    diag(p.mat) <- 0
    for (i in 1:(n - 1)) {
        for (j in (i + 1):n) {
            tmp <- cor.test(mat[, i], mat[, j], ...)
            p.mat[i, j] <- p.mat[j, i] <- tmp$p.value
        }
    }
  colnames(p.mat) <- rownames(p.mat) <- colnames(mat) <- diag.labels
  p.mat
}

ids <- c(seq(1,11))

M<-cor(mtcars)
p.mat <- cor.mtest(mtcars, diag.labels=ids)
corrplot(M, type="upper", order="hclust", diag=FALSE, # TODO tl.pos=c("d"),
         p.mat = p.mat, sig.level = 0.05)

图。 1 输出对角线上没有预期标签的地方, 图 2 伪造 K.J.J.K 的提议,其中对对角线标签没有影响, 图 3 对角线上标注有corrgram 的示例here

预期输出:对角线上的数字标签,如图 3 所示,但其他方面需要装饰,如图 (1-2)

伪造K.J.J.K的提议

获取代码here,您将获得图2中对角线标签没有变化的输出。

操作系统:Debian 8.5
R:3.3.1
开发者 Github 中的门票:#71

【问题讨论】:

  • 投反对票!留下反馈!

标签: r correlation diagonal r-corrplot


【解决方案1】:
library("corrplot")

# http://rstudio-pubs-static.s3.amazonaws.com/6382_886fbab74fd5499ba455f11360f78de7.html
# plotcorr(R, col = colorRampPalette(c("#E08214", "white", "#8073AC"))(10), type = "lower")

# http://www.sthda.com/english/wiki/visualize-correlation-matrix-using-correlogram
# corrplot(M, type="upper", order="hclust", tl.col="black", tl.srt=45)

## Compute p-value of correlations
# mat : is a matrix of data
# ... : further arguments to pass to the native R cor.test function

M<-cor(mtcars)

# http://www.sthda.com/english/wiki/visualize-correlation-matrix-using-correlogram
cor.mtest <- function(mat, ...) {
  mat <- as.matrix(mat)
  n <- ncol(mat)
  p.mat<- matrix(NA, n, n)
  diag(p.mat) <- 0
  for (i in 1:(n - 1)) {
    for (j in (i + 1):n) {
      tmp <- cor.test(mat[, i], mat[, j], ...)
      p.mat[i, j] <- p.mat[j, i] <- tmp$p.value
    }
  }
  colnames(p.mat) <- rownames(p.mat) <- colnames(mat)
  p.mat
}
# matrix of the p-value of the correlation
p.mat <- cor.mtest(mtcars)
head(p.mat[, 1:5])

corrplot(M, type="upper", order="hclust", 
  p.mat = p.mat, sig.level = 0.05)

# Leave blank on no significant coefficient
corrplot(M, type="upper", order="hclust", 
  p.mat = p.mat, sig.level = 0.01, insig = "blank")

col <- colorRampPalette(c("#BB4444", "#EE9988", "#FFFFFF", "#77AADD", "#4477AA"))
corrplot(M, method="color", col=col(200),  
  type="upper", order="hclust", 
  addCoef.col = "black", # Add coefficient of correlation
  tl.col="black", tl.srt=45, #Text label color and rotation
  # Combine with significance
  p.mat = p.mat, sig.level = 0.01, insig = "blank", 
  # hide correlation coefficient on the principal diagonal
  diag=FALSE 
)

ids <- c(seq(1,11))
M<-cor(mtcars)
colnames(M)<-ids
rownames(M)<-c("I","told","you","row","names","controls","the","diag","labels","kj","jk")

corrplot(M, type="upper",p.mat = p.mat, sig.level = 0.05)

我得到的输出:

【讨论】:

  • 在扫描corrplot函数并测试了一些东西之后,我可以这样说:
  • 抱歉,这是行名,不是列名。昨晚想了想,记错了。
猜你喜欢
  • 2017-05-28
  • 2016-06-28
  • 1970-01-01
  • 2017-05-31
  • 2017-03-23
  • 2011-07-18
  • 2015-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多