查看原文
其他

R语言绘制相关图的几种常用方法及R包

生信小白鱼 鲤小白 小白鱼的生统笔记 2022-07-05
简介相关矩阵可视化的几种基础R包
前文对PearsonSpearmanKendallPolychoricTetrachoricPolyserialBiserial等相关系数的基本概念及其在R中的计算方法作了简介,本篇继续展示相关矩阵(记录了两两变量间的相关系数)的可视化方法,相关图的一些绘制示例。
本篇选择了一些简单易上手的R包作展示,包括corrplot包、corrgram包、GGally包、ggcorrplot包等,大部分情况下足以满足需求。复杂的可视化方法(例如ggcor包,http://houyun.xyz/post/2019/10/26/ggcor/,绝对惊艳),以后再慢慢分享。
##计算相关矩阵,以变量间 pearson 相关系数为例
#对称相关矩阵
cor_pearson <- cor(mtcars, method = 'pearson')
cor_pearson
 
#非对称相关矩阵
x <- c('mpg', 'cyl', 'disp', 'hp')
y <- c('drat', 'wt', 'qsec')
 
cor_pearson_xy <- cor(mtcars[x], mtcars[y], method = 'pearson')
cor_pearson_xy

 

corrplot包的相关图


首先是corrplot包的相关图绘制,这个包应该是最常用的了,以下展示一些作图示例。

library(corrplot)

#method 参数,调整相关系数的展示方式
corrplot(cor_pearson, method = 'circle')
corrplot(cor_pearson, method = 'ellipse')
corrplot(cor_pearson, method = 'pie')
corrplot(cor_pearson, method = 'shade')
corrplot(cor_pearson, method = 'color')
corrplot(cor_pearson, method = 'number')


#当 method 不为 “number”时,可使用 addgrid.col 设置颜色显示相关系数,同时配合 number.font 等参数使用
#例如当 method = 'square' 时,在图中显示相关系数数值
corrplot(cor_pearson_xy, method = 'square', addCoef.col = 'black')

#order、hclust.method(当 order = 'hclust' 时可调整)等参数,可根据相关性强度对变量的展示顺序重新排列
#例如将变量根据 ward 最小方差聚类排序,并将变量聚为 3 类
corrplot(cor_pearson, method = 'color', addCoef.col = 'black', number.cex = 0.8,
order = 'hclust', hclust.method = 'ward.D', addrect = 3)


#tl.pos、tl.cex、tl.col、tl.offset、tl.srt 等参数,调整变量标签字体属性
#cl.pos、cl.lim、cl.length、cl.cex、cl.ratio、cl.align.text、cl.offset 等参数,调整相关性标尺属性
#number.cex、number.font、number.digits 等参数,调整相关性数字属性
#col 属性自定义相关性的颜色设置,bg 可设置背景色
#添加 add = TRUE 时(默认 FALSE),可将新图叠加在原图上方
corrplot(cor_pearson, method = 'number', diag = FALSE, tl.cex = 0.8,
number.cex = 0.8, cl.pos = 'b', cl.length = 5)
corrplot(cor_pearson, method = 'shade', diag = FALSE, tl.pos = 'n',
cl.pos = 'n', add = TRUE, type = 'upper')

col1 <- colorRampPalette(c('blue4', 'blue', 'white', 'orange', 'red3'))
corrplot(cor_pearson, method = 'color', diag = FALSE, col = col1(21), tl.cex = 0.8,
cl.pos = 'b', cl.length = 6, addCoef.col = 'black')
corrplot(cor_pearson, method = 'circle', diag = FALSE, col = col1(21), tl.pos = 'n',
cl.pos = 'n', add = TRUE, type = 'upper')

#当存在显著性检验结果时,可使用 sig.level、insig 等参数根据显著性 p 值屏蔽不显著的相关系数
#Hmisc 包中的 rcorr(),计算相关系数的显著性
library(Hmisc)
rcorr_pearson <- rcorr(as.matrix(mtcars), type = 'pearson')

#相关图,只显示 p<0.05 的相关系数
col1 <- colorRampPalette(c('blue4', 'blue', 'white', 'orange', 'red3'))
corrplot(rcorr_pearson$r, method = 'square', type = 'lower', p.mat = rcorr_pearson$P, sig.level = 0.05, insig = 'blank',
addCoef.col = 'black', diag = FALSE, col = col1(21), number.cex = 0.8, tl.cex = 0.8)

corrplot(rcorr_pearson$r, method = 'number', p.mat = rcorr_pearson$P, sig.level = 0.05, insig = 'blank',
col = col1(21), tl.cex = 0.8, number.cex = 0.8, cl.length = 5, diag = FALSE)
corrplot(rcorr_pearson$r, method = 'pie', p.mat = rcorr_pearson$P, sig.level = 0.05, insig = 'blank',
col = col1(21), tl.pos = 'n', cl.pos = 'n', add = TRUE, type = 'upper', diag = FALSE)

 

corrgram包的相关图


corrplot包也是绘制相关图的常用R包,以下展示一些示例。

library(corrgram)

#order = TRUE 时,可根据相关性强度对变量的展示顺序重新排列,类似聚类
corrgram(cor_pearson, order = TRUE)

#lower.panel、upper.panel 等参数可以设置相关系数的展示方式
#只展示对称矩阵的下三角区域
corrgram(cor_pearson, lower.panel = panel.fill, upper.panel = NULL, order = TRUE)


#text.panel、label.pos 、label.srt、cex.labels、font.labels 等参数可用于调整面板的外观显示样式
#col.regions 可用于自定义颜色范围
#下三角区域填充图样式,上三角区域饼图样式,并修改一些主题
col1 <- colorRampPalette(c('blue4', 'blue', 'white', 'orange', 'red3'))
corrgram(cor_pearson, lower.panel = panel.shade, upper.panel = panel.pie,
col.regions = col1, cex.labels = 1)

#此外,可以直接读取原始数据,通过指定相关系数类型,作图展示
#相较于直接读取相关矩阵,此时可以添加散点图或拟合线图类型展示变量间的相关性
corrgram(mtcars, cor.method = 'pearson', lower.panel = panel.pts, upper.panel = panel.ellipse)

 

GGally包的相关图


GGally包在ggplot2的基础上构建,可以视作ggplot2的扩展包,用于可视化相关图。

以下展示一些示例。

library(GGally)

#label = TRUE 时,在图中展示相关系数数值,此时可使用 label_alpha、label_color、label_round、label_size 等参数设置字体属性
ggcorr(cor_pearson, label = TRUE, label_alpha = TRUE)

#low、mid、high 等参数可自定义颜色范围,例如
ggcorr(cor_pearson, low = 'blue', mid = 'white', high = 'red')


#读取原始数据,指定所需计算的相关系数类型,自定义作图样式
#例如将相关性表示为大小不同的圆圈,控制相关性颜色范围等
ggcorr(
data = mtcars,
method = c('pairwise', 'pearson'),
name = expression(rho),
geom = 'circle',
max_size = 15,
min_size = 5,
size = 3,
hjust = 0.75,
nbreaks = 6,
palette = 'PuOr' )

#ggpairs() 还可通过原始变量绘制变量间关系的散点图矩阵,同时作为 ggplot2 的扩展,可实现类似分面图的效果
ggpairs(data = mtcars, columns = 1:6)

 

ggcorrplot包的相关图


基于ggplot2延伸的包其实是非常多的,再展示一个,ggcorrplot,具有corrplotggplot2组合的风格。

以下展示一些示例。

library(ggcorrplot)

#method 参数,调整相关系数的展示方式
ggcorrplot(cor_pearson, method = 'circle')
ggcorrplot(cor_pearson, method = 'square')

#实现聚类效果
ggcorrplot(cor_pearson, hc.order = TRUE, outline.color = 'white', hc.method = 'complete')

#仅展示对称矩阵的下三角部分
ggcorrplot(cor_pearson, hc.order = TRUE, type = 'lower', outline.color = 'white')


#更改颜色以及主题
ggcorrplot(cor_pearson, hc.order = TRUE, type = 'lower', outline.color = 'white',
ggtheme = ggplot2::theme_gray, colors = c('blue3', 'white', 'red3'))

#添加相关系数
ggcorrplot(cor_pearson, hc.order = TRUE, type = 'lower', lab = TRUE)

 

使用热图展示相关图


不难看到上述的这种相关图其实和热图很相像,用热图可视化相关矩阵也是可以的。

col1 <- colorRampPalette(c('blue', 'white', 'red'))

#基础包热图
heatmap(cor_pearson, col = col1(100))

#gplots 包的热图
library(gplots)
heatmap.2(cor_pearson, col = col1(100), trace = 'none', density.info = 'none')

#pheatmap 包的热图
library(pheatmap)
pheatmap(cor_pearson, col = col1(100))

#ComplexHeatmap 包的热图
library(ComplexHeatmap)
Heatmap(cor_pearson, col = col1(100))


链接

柱形图类:堆叠柱形图    分组柱形图    双向柱形图    蝴蝶图

箱线图类:箱线图    提琴图    密度提琴图饼图类:饼图扇形图    圆环图    旭日图    星形图    面积图类:堆叠面积图散点图类:二维散点图    三维散点图    火山图    曼哈顿图曲线图类:折线图和拟合线雷达图类:雷达图集合可视化:在线韦恩图    韦恩图    花瓣图    UpSet图圈图:关联弦图    简单弦图    基因组变异圈图三元相图:三元图树形图:聚类树    聚类树+堆叠柱形图    聚类树+排序散点图



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存