R语言绘制相关图的几种常用方法及R包
##计算相关矩阵,以变量间 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,具有corrplot和ggplot2组合的风格。
以下展示一些示例。
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))
柱形图类: