问题描述
我是R脚本的新手:-)
I am newbie in R scripts :-)
我需要建立一个相关矩阵,我正在尝试配置一些参数以适应该图.我正在使用corrplot
程序包.
I need build a correlation matrix and I´am trying to configurate some parameters to adapt the graph. I am using the corrplot
package.
我以此方式构建了Corrplot矩阵:
I Built a corrplot matrix this way:
corrplot(cor(d1[,2:14], d1[,2:14]), method=c("color"),
bg = "white", addgrid.col = "gray50",
tl.cex=1, type="lower", tl.col = "black",
col = colorRampPalette(c("red","white","blue"))(100))
我需要在我构建的颜色矩阵内的下部矩阵中显示相关值.我该怎么做?
I need show the values of correlation in the lower matrix inside the color matrix that I built. How i can do that?
是否可以从下矩阵中排除主对角线?在这个对角线中,我们总是有完美的相关性.
Is it possible exclude the main diagonal from the lower matrix? In this diagonl always we have the perfect correlation.
另一个疑问-我想使用星号而不是正方形来显示相关性的有效值.喜欢 (*, , *).有可能吗?
The other doubt - I want to show the significant values for the correlation using stars instead of squares. like (*, , *). Is it possible?
你能帮我吗?
推荐答案
有了一些黑客,您可以在非常相似的R包corrgram
中进行此操作.这一功能使您可以轻松定义自己的面板功能,并有助于使它们易于以模板形式查看.这是产生的一些代码和图形:
With a bit of hackery you can do this in a very similar R package, corrgram
. This one allows you to easily define your own panel functions, and helpfully makes theirs easy to view as templates. Here's the some code and figure produced:
set.seed(42)
library(corrgram)
# This panel adds significance starts, or NS for not significant
panel.signif <- function (x, y, corr = NULL, col.regions, digits = 2, cex.cor,
...) {
usr <- par("usr")
on.exit(par(usr))
par(usr = c(0, 1, 0, 1))
results <- cor.test(x, y, alternative = "two.sided")
est <- results$p.value
stars <- ifelse(est < 5e-4, "***",
ifelse(est < 5e-3, "**",
ifelse(est < 5e-2, "*", "NS")))
cex.cor <- 0.4/strwidth(stars)
text(0.5, 0.5, stars, cex = cex.cor)
}
# This panel combines edits the "shade" panel from the package
# to overlay the correlation value as requested
panel.shadeNtext <- function (x, y, corr = NULL, col.regions, ...)
{
if (is.null(corr))
corr <- cor(x, y, use = "pair")
ncol <- 14
pal <- col.regions(ncol)
col.ind <- as.numeric(cut(corr, breaks = seq(from = -1, to = 1,
length = ncol + 1), include.lowest = TRUE))
usr <- par("usr")
rect(usr[1], usr[3], usr[2], usr[4], col = pal[col.ind],
border = NA)
box(col = "lightgray")
on.exit(par(usr))
par(usr = c(0, 1, 0, 1))
r <- formatC(corr, digits = 2, format = "f")
cex.cor <- .8/strwidth("-X.xx")
text(0.5, 0.5, r, cex = cex.cor)
}
# Generate some sample data
sample.data <- matrix(rnorm(100), ncol=10)
# Call the corrgram function with the new panel functions
# NB: call on the data, not the correlation matrix
corrgram(sample.data, type="data", lower.panel=panel.shadeNtext,
upper.panel=panel.signif)
代码不是很干净,因为它主要是将软件包中的功能修补在一起,但是它应该为您提供一个良好的起点,以获取所需的图形.可能您也可以对corrplot
包采取类似的方法.
The code isn't very clean, as it's mostly patched together functions from the package, but it should give you a good start to get the plot you want. Possibly you can take a similar approach with the corrplot
package too.
更新:这是一个版本,在同一三角形上带有星星和cor:
update: Here's a version with stars and cor on the same triangle:
panel.shadeNtext <- function (x, y, corr = NULL, col.regions, ...)
{
corr <- cor(x, y, use = "pair")
results <- cor.test(x, y, alternative = "two.sided")
est <- results$p.value
stars <- ifelse(est < 5e-4, "***",
ifelse(est < 5e-3, "**",
ifelse(est < 5e-2, "*", "")))
ncol <- 14
pal <- col.regions(ncol)
col.ind <- as.numeric(cut(corr, breaks = seq(from = -1, to = 1,
length = ncol + 1), include.lowest = TRUE))
usr <- par("usr")
rect(usr[1], usr[3], usr[2], usr[4], col = pal[col.ind],
border = NA)
box(col = "lightgray")
on.exit(par(usr))
par(usr = c(0, 1, 0, 1))
r <- formatC(corr, digits = 2, format = "f")
cex.cor <- .8/strwidth("-X.xx")
fonts <- ifelse(stars != "", 2,1)
# option 1: stars:
text(0.5, 0.4, paste0(r,"\n", stars), cex = cex.cor)
# option 2: bolding:
#text(0.5, 0.5, r, cex = cex.cor, font=fonts)
}
# Generate some sample data
sample.data <- matrix(rnorm(100), ncol=10)
# Call the corrgram function with the new panel functions
# NB: call on the data, not the correlation matrix
corrgram(sample.data, type="data", lower.panel=panel.shadeNtext,
upper.panel=NULL)
也被注释掉是显示重要性的另一种方法,它将使那些低于阈值的内容加粗,而不是使用星号.可能会更清晰一些,具体取决于您要显示的内容.
Also commented out is another way of showing significance, it'll bold those below a threshold rather than using stars. Might be clearer that way, depending on what you want to show.
这篇关于关联Corrplot配置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!