如何在R corrplot中着色一些单元格边框?

时间:2016-11-10 22:43:00

标签: r colors border correlation r-corrplot

我希望通过使其边界与其他任何东西明显区别来保持一些细胞的注意力。

参数rect.col用于着色所有边框,但我想仅对单元格(3,3​​)和(7,7)的边框着色,例如,通过任何光晕颜色等{{1} }或heat.colors(100)

代码:

rainbow(12)

图。 1顶部代码的输出没有单元格边界, 图2手动将所有坐标转换为上三角形但在(10,1)处生成伪影后的输出 图3窗口大小修正的输出

enter image description here enter image description here enter image description here

输入:按ID library("corrplot") library("psych") ids <- seq(1,11) M.cor <- cor(mtcars) colnames(M.cor) <- ids rownames(M.cor) <- ids p.mat <- psych::corr.test(M.cor, adjust = "none", ci = F) p.mat <- p.mat[["r"]] corrplot(M.cor, method = "color", type = "upper", tl.col = 'black', diag = TRUE, p.mat = p.mat, sig.level = 0.0000005 ) (3,3)生成的位置 预期输出:两个单元格,其中边框标记在上三角形

伪代码

(7,7)

测试user20650的提案

# ids must be id.pairs  
# or just a list of two lists
createBorders <- function(id.pairs) {

  labbly(id.pairs,function(z){
    x <- z$V1
    y <- z$V2
    rect(x+0.5, y+0.5, x+1.5, y+1.5) # user20650

  })
}

corrplot(...)
# TODO Which datastructure to use there in the function as the paired list of ids? 
createBorders(ids.pairs)

图2中的输出。 为此提供一个功能会很棒。 假设您有一个ID列表。

我认为这个位置有问题,因为(2,3),(9,10)导致了(2,3),(2,3)中的点。

迭代用户20650的聊天提案

rect(2+0.5, 9+0.5, 3+0.5, 10+0.5, border="white", lwd=2)

输出,其中只有一个单元格边框标记在图3中。

预期输出:标记三个单元格边框

图2中的限制方法

您必须首先将所有坐标都工作到上三角形。 因此,您现在只能调用以下输出在图2中的(10,1)处具有伪像的文件

library("corrplot")
library("psych")

ids <- seq(1,11)

M.cor <- cor(mtcars)
colnames(M.cor) <- ids
rownames(M.cor) <- ids

p.mat <- psych::corr.test(M.cor, adjust = "none", ci = F)
p.mat <- p.mat[["r"]]

# Chat of http://stackoverflow.com/q/40538304/54964 user20650
cb <- function(corrPlot, ..., rectArgs = list() ){
        lst <- list(...)
                n <- ncol(corrPlot)
                nms <- colnames(corrPlot)
                colnames(corrPlot) <- if(is.null(nms)) 1:ncol(corrPlot) else nms

                xleft <- match(lst$x, colnames(corrPlot)) - 0.5
                ybottom <- n - match(lst$y, colnames(corrPlot)) + 0.5

                lst <- list(xleft=xleft, ybottom=ybottom, xright=xleft+1, ytop=ybottom+1)
                do.call(rect, c(lst, rectArgs))
}
plt <- corrplot(M.cor,
                method = "color",
                type = "upper",
                tl.col = 'black',
                diag = TRUE,
                p.mat = p.mat,
                sig.level = 0.0000005
               )
cb(plt, x=c(1, 3, 5), y=c(10, 7, 4), rectArgs=list(border="white", lwd=3))

预期输出:(10,1)

时没有伪影

工件的原因可能是白色背景,但如果边框颜色为cb(plt, x=c(10, 7, 5), y=c(1, 3, 4), rectArgs=list(border="white", lwd=3)) ,也会发生这种情况,因此很可能不是原因。 解决方案 - 修复图3中的窗口大小及其输出

red

R:3.3.1
操作系统:Debian 8.5
Docs corrplot:here

1 个答案:

答案 0 :(得分:1)

我的建议仍然是伪代码mark.ids。我发现最好pltmark.ids作为corrplotCellBorders的选项,它会创建带有边框的有希望的单元格的corrplot

mark.ids <- {x <- c(1), y <- c(2)} # TODO pseudocode
corrplotCellBorders(plt, mark.ids)
cb(plt, x, y, rectArgs=list(border="red", lwd=3))

# Chat of https://stackoverflow.com/q/40538304/54964 user20650
# createBorders.r, test.createBorders. 
cb <- function(corrPlot, ..., rectArgs = list() ){ 
# ... pass named vector of x and y names 
# for upper x > y, lower x < y 
  lst <- list(...) 

  n <- ncol(corrPlot) 
  nms <- colnames(corrPlot) 
  colnames(corrPlot) <- if(is.null(nms)) 1:ncol(corrPlot) else nms 

  xleft <- match(lst$x, colnames(corrPlot)) - 0.5 
  ybottom <- n - match(lst$y, colnames(corrPlot)) + 0.5 

  lst <- list(xleft=xleft, ybottom=ybottom, xright=xleft+1, ytop=ybottom+1) 
  do.call(rect, c(lst, rectArgs)) 
}

corrplotCellBorders <- function(plt, mark.ids) {
  x <- mark.ids$x
  y <- mark.ids$y
  cb(plt, x, y, rectArgs=list(border="red", lwd=3))
}

打开

  • 如何创建mark.ids,以便您可以mark.ids$xmark.ids$y调用其项目?
  • 整合上三角形here
  • 的点顺序中性