R语言绘图 | 使用corrplot绘制相关性热图
介绍
R语言的corrplot包能够优雅地将数据的相关性可视化出来,实现数据的相关性展示。corrplot 非常易于使用,在可视化方法、图形布局、颜色、图例、文本标签等方面提供了丰富的绘图选项。它还提供 p 值和置信区间,帮助用户确定相关性的统计意义。
安装和加载R包
install.packages("corrplot")
library(corrplot)
可视化方法
corrplot 包中有七种可视化方法,分别命名为:'circle''square''ellipse''number''shade''color''pie'。
circle
以圆圈的面积表示相应相关系数的绝对值。
square
正方形的面积表示相应相关系数的绝对值。
ellipse
使用椭圆的大小和形状来表示相关性系数的强度和方向。
number
以不同颜色的系数数字表示相关性系数。
color
以大小相同、颜色不同的正方形表示相关性系数。
shade
类似于color
,但负系数字形是阴影的。
pie
圆圈按顺时针方向填充表示正值,按逆时针方向填充表示负值。
yyds = cor(mtcars)
corrplot(yyds) #默认情况下为圆形
corrplot(yyds, method = "square")
corrplot(yyds,method = "ellipse")
corrplot(yyds,method = "number")
corrplot(yyds,method = "color")
corrplot(yyds, method = "shade")
corrplot(yyds, method = "pie")
排列方式
通过order()
函数:'AOE''FPC''hclust''alphabet'
AOE
代表 "A-O-E",首先按照绝对值的大小进行排序(A),然后按照相关性系数的值(正或负)进行排序(O),最后按照相关性系数的接近于0的程度进行排序(E)。
FPC
代表按照相关性系数的方差解释比例进行排序。
hclust
使用层次聚类的方法对相关性系数进行排序,在相关矩阵图的周围绘制矩形。
alphabet
按字母顺序排列。
corrplot(yyds,method = "shade",order = "AOE")
corrplot(yyds, method = "square", order = "FPC")
corrplot(yyds, method = 'square', order = 'hclust',
addrect = 3, rect.col = 'blue', rect.lwd = 3, tl.pos = 'd')
#addrect = 3: 添加三个矩形框
#rect.col = 'blue':矩形框的颜色设置为蓝色。
#rect.lwd = 3:矩形框的线宽设置为3。
#tl.pos = 'd':矩形框的左上角标记的位置设置为“d”,表示在数据点的位置上显示标记。
corrplot(yyds,method = "shade",order = "alphabet")
type = "lower"
只显示下三角部分
type = "upper"
只显示上三角部分
diag = FALSE
不显示对角线上的相关性系数
corrplot(yyds, method = "square", order = "FPC", type = "lower", diag = FALSE)
corrplot(yyds, method = "square", order = "FPC", type = "upper", diag = FALSE)
corrplot(yyds,method = "shade",order = "AOE",diag = FALSE)
还可以通过seriation包对矩阵进行重新排序,这里就不一一演示了
色谱、颜色图例和文字图例
可以从 COL1() 和 COL2() 中获得连续和发散的颜色,下面显示了来自 COL2() 的所有发散颜色和来自 COL1() 的连续颜色。
COL1(sequential = c("Oranges", "Purples", "Reds", "Blues", "Greens",
"Greys", "OrRd", "YlOrRd", "YlOrBr", "YlGn"), n = 200)
COL2(diverging = c("RdBu", "BrBG", "PiYG", "PRGn", "PuOr", "RdYlBu"), n = 200)
cl.pos
用于颜色标签的位置。如果是字符,则必须是 'r'
(表示右侧,如果是 type='upper'
或 'full'
则默认为右侧)、'b'
(表示底部,如果是 type='lower'
则默认为底部)或 'n'
(表示不绘制颜色标签)之一。
cl.ratio
彩色图例的宽度,建议为 0.1~0.2。
tl.pos
用于文本标签的位置。它可以是字符或逻辑值。如果是字符,则必须是 'lt'、'ld'、'td'、'd'、'l'
、'n'
中的一个。'lt'
表示左侧和顶部,'ld'
表示左侧和对角线,'td'
表示顶部和对角线(附近),'d'
表示对角线,'l'
表示左侧,'n'
表示不添加文本标签。
tl.cex
表示文本标签的大小。
tl.srt
文本标签字符串旋转的度数。
## 删除颜色图例、文本图例和主对角线字形
corrplot(yyds, order = 'AOE', cl.pos = 'n', tl.pos = 'n',
col = c('white', 'black'), bg = 'gold2')
可视化非相关矩阵
is.corr=FALSE
可视化非相关矩阵当 is.corr=TRUE
时,col.lim
只影响颜色图例
col.lim
指定颜色
win.asp
调整长宽比
N1 = matrix(runif(80, -15, 10), 8)
corrplot(N2, is.corr = FALSE, method = 'color', col.lim = c(-15, 10), tl.pos = 'n',
col = COL2('PiYG'), cl.pos = 'b', addCoef.col = 'grey50')
p 值和置信区间
p.mat
是 p 值矩阵,如果 NULL、参数 sig.level、insig, pch、pch.col、pch.cex 无效。
sig.level
显著水平,默认为 0.05
。如果 p-mat 中的 p 值大于 sig.level,则相应的相关系数被视为不显著。如果 insig 是 'label_sig',sig.level 可以是显著性水平的递增向量,在这种情况下,pch 将在最高 p 值区间使用一次,在每个较低 p 值区间使用多次。
insig
专门的不显著相关系数、'pch'、'p-value'、'blank','n'或 'label_sig'
。如果是 'blank'
,则擦去相应的字形;如果是 'p-value'
,则在相应的字形上添加 p 值;如果是 'pch'
,则在相应的字形上添加字符;如果是 'n'
,则不采取任何措施;如果是 'label_sig'
,则用 pch
标记显著相关。
pch
用于在相关系数不显著的字形上添加字符(仅在 insig 为 'pch' 时有效)。
plotCI
是表示绘制置信区间的方法的字符。如果 'n'
,则不绘制置信区间。如果 'rect'
,则绘制上边表示上限、下边表示下限的矩形。
lowCI.mat
是置信区间下限矩阵。
uppCI.mat
是置信区间上限的矩阵。
lowCI
是置信区间矩阵的下限。
uppCI
是置信区间矩阵的下限。
testRes = cor.mtest(mtcars, conf.level = 0.95)
## 根据显著性水平计算的不显著值
corrplot(yyds, p.mat = testRes$p, sig.level = 0.10, order = 'hclust', addrect = 2)
## 不显著系数留空
## 添加重要的相关系数
corrplot(yyds, p.mat = testRes$p, method = 'circle', type = 'lower', insig='blank',
addCoef.col ='black', number.cex = 0.8, order = 'AOE', diag=FALSE)
## 不显著系数留空
## 添加所有相关系数
corrplot(yyds, p.mat = testRes$p, method = 'circle', type = 'lower', insig='blank',
order = 'AOE', diag = FALSE)$corrPos -> p1
text(p1$x, p1$y, round(p1$corr, 2))
## 添加无意义系数的 p 值
corrplot(yyds, p.mat = testRes$p, insig = 'p-value')
## 添加所有 p 值
corrplot(yyds, p.mat = testRes$p, insig = 'p-value', sig.level = -1)
## 增加重要级星
corrplot(yyds, p.mat = testRes$p, method = 'color', diag = FALSE, type = 'upper',
sig.level = c(0.001, 0.01, 0.05), pch.cex = 0.9,
insig = 'label_sig', pch.col = 'grey20', order = 'AOE')
## 添加重要等级星和星群矩形
corrplot(yyds, p.mat = testRes$p, tl.pos = 'd', order = 'hclust', addrect = 2,
insig = 'label_sig', sig.level = c(0.001, 0.01, 0.05),
pch.cex = 0.9, pch.col = 'grey20')
# 可视化置信区间
corrplot(yyds, lowCI = testRes$lowCI, uppCI = testRes$uppCI, order = 'hclust',
tl.pos = 'd', rect.col = 'navy', plotC = 'rect', cl.pos = 'n')
# 可视化置信区间,并划出重要系数
corrplot(yyds, p.mat = testRes$p, lowCI = testRes$lowCI, uppCI = testRes$uppCI,
addrect = 3, rect.col = 'navy', plotC = 'rect', cl.pos = 'n')
参考资料:
[1]https://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html