以这些数据为例:
最初的回答:
df = data.frame(x = runif(100),
y = runif(100),
z = runif(100),
w = runif(100),
v = runif(100),
u = runif(100))
计算相关矩阵:
library("dplyr")
mat = matrix(NA, nrow = ncol(df), ncol = ncol(df)) %>%
`row.names<-`(names(df)) %>%
`colnames<-`(names(df))
mat[upper.tri(mat)] = cor(df,method="pearson")[upper.tri(mat)]
mat[lower.tri(mat)] = cor(df,method="spearman")[lower.tri(mat)]
将长格式转换为宽格式:
cor.long = reshape2::melt(mat)
"最初的回答":然后绘制图表:
library("ggplot2")
library("RColorBrewer")
pal = colorRampPalette(rev(brewer.pal(11, "Spectral")))
ggplot(cor.long, aes(Var1, factor(Var2, rev(levels(Var2))), fill = value)) +
geom_tile() +
geom_text(aes(label = Var1), data = cor.long %>% filter(Var1 == Var2)) +
geom_text(aes(label = value %>% round(digits = 3)), data = cor.long %>% filter(Var1 != Var2)) +
scale_y_discrete(limits = rev(levels(df$Var2))) +
scale_fill_gradientn(colours = pal(100), na.value = "white", limits=c(-.5,.5)) +
theme(panel.background = element_blank(),
axis.title = element_blank(),
axis.text = element_text(angle = 45),
legend.position = "none")
corrgram
只允许使用 Pearson 相关系数,来源:https://github.com/kwstat/corrgram/blob/master/R/corrgram.r - heck1