我希望通过使其边界与其他任何东西明显区别来保持一些细胞的注意力。
参数rect.col
用于着色所有边框,但我想仅对单元格(3,3)和(7,7)的边框着色,例如,通过任何光晕颜色等{{1} }或heat.colors(100)
。
代码:
rainbow(12)
图。 1顶部代码的输出没有单元格边界, 图2手动将所有坐标转换为上三角形但在(10,1)处生成伪影后的输出 图3窗口大小修正的输出
输入:按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)
# 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)中的点。
rect(2+0.5, 9+0.5, 3+0.5, 10+0.5, border="white", lwd=2)
输出,其中只有一个单元格边框标记在图3中。
预期输出:标记三个单元格边框
您必须首先将所有坐标都工作到上三角形。 因此,您现在只能调用以下输出在图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
答案 0 :(得分:1)
我的建议仍然是伪代码mark.ids
。我发现最好plt
和mark.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$x
和mark.ids$y
调用其项目?