点击蓝字关注这个神奇的公众号~

作者:赵镇宁 R语言中文社区特约作者

当考察多个变量间的相关关系时,通常将多个变量的两两关系以矩阵的形式排列起来,R提供了散点图矩阵、相关矩阵等多种可视化方案,囊括了众多函数。本文对R语言相关关系可视化的函数进行了初步梳理(全篇框架如下),后续大家可根据个人需求及函数功能择优选择。

一、pairs {graphics}

1、参考

(1)《现代统计图形》 5.17 散点图矩阵

(2)《R数据可视化手册》 5.13绘制散点图矩阵

(3)pairs {graphics} 帮助文档

2、主要参数解释

3、图形示例

(1)基本图形

pairs(iris[1:4], main = "Anderson's Iris Data -- 3 species",

pch = 21, bg = c("red", "green3", "blue")[unclass(iris$Species)])

# 等同于 pairs(~Sepal.Length+Sepal.Width+Petal.Length+Petal.Width, data=iris,main = "Anderson's Iris Data -- 3 species",pch = 21, bg = c("red", "green3", "blue")[unclass(iris$Species)])

上例选取iris鸢尾花数据集的前4列Sepal.Length 、Sepal.Width 、Petal.Length、Petal.Width作图,同时设置bg使得不同颜色代表不同品种的鸢尾花。可见,默认生成的散点图矩阵对角线为变量名称,上三角和下三角面板的各个窗格均为其所在行与列两个变量之间的散点图,信息传递量相对较少且重复,为此我们可以通过自定义函数进一步修改和优化。

(2)自定义图形

# 1. 自定义函数pannel.cor:显示两两变量间的相关系数,相关系数越大字号越大。

panel.cor <- function(x, y, digits = 2, prefix = "", cex.cor, ...)

{

usr <- par("usr"); on.exit(par(usr))

par(usr = c(0, 1, 0, 1))

r <- abs(cor(x, y))

txt <- format(c(r, 0.123456789), digits = digits)[1]

txt <- paste0(prefix, txt)

if(missing(cex.cor)) cex.cor <- 0.8/strwidth(txt)

text(0.5, 0.5, txt, cex = cex.cor * r)

}

# 2. 自定义函数pannel.hist:展示各个变量的直方图

panel.hist <- function(x, ...)

{

usr <- par("usr"); on.exit(par(usr))

par(usr = c(usr[1:2], 0, 1.5) )

h <- hist(x, plot = FALSE)

breaks <- h$breaks; nB <- length(breaks)

y <- h$counts; y <- y/max(y)

rect(breaks[-nB], 0, breaks[-1], y, col = "cyan", ...)

}

# 3. 自定义函数panel.ls:绘制散点图,并为其添加线性拟合直线

panel.lm<-function(x,y,col=par("col"),bg=NA,pch=par("pch"),

cex=1,col.smooth="black",...){

points(x,y,pch=pch,col=col,bg=bg,cex=cex)

abline(stats::lm(y~x),col=col.smooth,...)

}

# 4. 用相关系数(pannel.cor)替代默认图形上三角的散点图,用直方图(pannel.hist)替代默认图形对角线的变量名称,用添加线性拟合线的散点图(panel.ls)代替默认图形下三角的散点图。

pairs(iris[1:4], main = "Anderson's Iris Data -- 3 species",

pch = 21, bg = c("red", "green3", "blue")[unclass(iris$Species)],

diag.panel=panel.hist,

upper.panel=panel.cor,

lower.panel=panel.lm)

自定义后的散点图矩阵主对角线上用了直方图,从中我们可以看到四个变量各自的分布情况;上三角面板显示了各个变量之间的相关系数,相关系数越大字号越大;下三角为散点图,并用不同颜色的点标记出鸢尾花的不同类型,同时利用函数panel.ls()添加了一条线性拟合线。此外,我们也可以将子面板函数设置为NULL,使得图形仅显示一半。

二、gpairs {gpairs}

1、参考

(1)gpairs {gpairs} 帮助文档

(2)统计之都:不同版本的散点图矩阵

https://cosx.org/2009/03/scatterplot-matrix-visualization

2、主要参数解释

3、图形示例

library(gpairs)

gpairs(iris, upper.pars = list(scatter = 'stats'),

scatter.pars = list(pch = substr(as.character(iris$Species), 1, 1),

col = as.numeric(iris$Species)),

stat.pars = list(verbose = TRUE))

上图中,4*4矩阵反映了iris前4列Sepal.Length 、Sepal.Width 、Petal.Length、Petal.Width变量两两之间的相关关系,其中,上三角显示了相关关系的数量特征,如相关系数、p值等;下三角为散点图,不同种类的鸢尾花用不同颜色、不同点型表示;最右侧一列和最下方一行则分别对三种鸢尾花的花萼和花瓣长宽进行了简单的描述性统计分析。

三、corrgram {corrgram}

1、参考

(1)《R语言实战》11.3 相关图

(2)Friendly M. Corrgrams: Exploratory Displays for Correlation Matrices[J]. American Statistician, 2002, 56(4):316-324.

(3)corrgram {corrgram} 帮助文档

2、主要参数解释

3、图形示例

library(corrgram)

vars2 <- c("Assists","Atbat","Errors","Hits","Homer","logSal",

"Putouts","RBI","Runs","Walks","Years")

corrgram(baseball[vars2], order=TRUE, main="Baseball data PC2/PC1 order",

lower.panel=panel.shade, upper.panel=panel.pie)

上图中,下三角面板用阴影的深度来表示相关性大小,其中蓝色和从左下指向右上的斜杠表示单元格中的两个变量呈正相关,红色和从左上指向右下的斜杠表示变量呈负相关;色彩越深,饱和度越高,变量相关性越大。上三角面板用饼图的填充比例来表示相关性大小,颜色的功能同上,但相关性大小由被填充的饼图块的大小来展示,正相关性将从12点钟处开始顺时针填充饼图,负相关性则逆时针方向填充饼图。

corrgram(auto, order=TRUE, main="Auto data (PC order)",

lower.panel=corrgram::panel.ellipse,

upper.panel=panel.bar, diag.panel=panel.minmax,

col.regions=colorRampPalette(c("darkgoldenrod4", "burlywood1",

"darkkhaki", "darkgreen")))

上图中,下三角面板绘制置信椭圆和平滑拟合曲线,上三角面板绘制柱形图;主对角面板指定显示变量的最小值和最大值;矩阵的行和列利用主成分分析法进行了重排序。此外,也可设置 lower.panel或upper.panel为NULL使得图形仅显示一半。

四、corrplot {corrplot}

1、参考

(1)《R数据可视化手册》13.1 绘制相关矩阵图

(2)corrplot {corrplot} 帮助文档

(3)知乎:R语言相关系数可视化之corrplot包

https://zhuanlan.zhihu.com/p/28076189

(4)CSDN博客:R画月亮阴晴圆缺-corrplo绘图相关系数矩阵

https://blog.csdn.net/woodcorpse/article/details/79417978

2、主要参数解释

3、图形示例

(1)相关矩阵可视化

A. 仅相关系数

library(corrplot)

data(mtcars)

M <- cor(mtcars)

corrplot(M, order = "AOE", type = "upper", tl.pos = "d")

corrplot(M, add = TRUE, type = "lower", method = "number", order = "AOE",

diag = FALSE, tl.pos = "n", cl.pos = "n")

上图中,上三角面板以不同颜色和大小的圆形表示相关性大小,其中,蓝色表示正相关,红色表示负相关;颜色越深、圆形越大代表相关性越高;下三角面板在原有图形的基础上叠加而成(如果想仅显示部分,可不再叠加),用相关系数的数值和颜色表示相关性方向和大小,并利用AOE(前两个特征向量的角排序)对变量进行重排序。

B. 相关系数+P值

res1 <- cor.mtest(mtcars, conf.level = 0.95)

corrplot(M, method="ellipse",p.mat = res1$p, sig.level = 0.2,order = "AOE", type = "upper", tl.pos = "d")

corrplot(M, add = TRUE, p.mat = res1$p, sig.level = 0.2,type = "lower", method = "number", order = "AOE",

diag = FALSE, tl.pos = "n", cl.pos = "n")

上图中,上三角面板绘制椭圆形,下三角显示相关系数,并设置没通过统计相关性检验的结果打X。

(2)普通矩阵可视化

corrplot还支持对普通矩阵进行可视化,如下图。

dat = matrix(c(1:10,10:1), nrow = 10)

wb <- c("white", "black")

corrplot(t(dat), method="pie", is.corr = F, cl.pos = "n", tl.pos = "n",

cl.lim = c(1,10),col = wb, bg = "gold2")

五、ggpairs {GGally}

1、参考

ggpairs {GGally}帮助文档

2、主要参数解释

3、图形示例

(1)直接指定图形类型

library(GGally)

ggpairs(flea, columns = 2:4, ggplot2::aes(colour=species))

上图基于函数默认参数设置,并建立颜色和种类的映射,使得不同种类具有不同颜色,其中,上三角面板显示相关系数,包括总体相关以及不同种类的相关;下三角绘制散点图;主对角线用面积图表示。

(2)自定义函数

library(ggplot2)

diamonds.samp <- diamonds[sample(1:dim(diamonds)[1], 1000), ]

ggpairs(

diamonds.samp[, c(1:2,5,7)],

mapping = aes(color = cut),

lower = list(continuous = wrap("density", alpha = 0.5), combo = "dot_no_facet"),

title = "Diamonds"

)

上图利用wrap将相关参数进行封装,使得下三角显示密度图,透明度为0.5。

六、coplot {graphics}

又名“条件分割图”,与上述函数思想有所不同,该函数能够实现在给定某一个(或几个)变量z之后看观察两个变量之间的关系(以散点图形式),条件分割图中散点图的顺序是从左到右、从下到上,分别与条件变量从左到右、从下到上的指示条对应。关于coplot的具体解释和用法可参见帮助文档及谢益辉《现代统计图形》5.9 条件分割图,下面是原书中的一个例子。

par(mar = rep(0, 4), mgp = c(2, 0.5, 0))

library(maps)

coplot(lat ~ long | depth, data = quakes, number = 4,

ylim = c(-45, -10.72), panel = function(x, y, ...) {

map("world2", regions = c("New Zealand","Fiji"),

add = TRUE, lwd = 0.1, fill = TRUE,col = "lightgray")

text(180, -13, "Fiji", adj = 1)

text(170, -35, "NZ")

points(x, y, col = rgb(0.2, 0.2, 0.2, 0.5))

})

quakes {datasets} 数据集反映了1964年以来斐济岛附近发生的震级MB大于4.0的地震事件数据,如果我们想知道该地区在地震深度分布上是否均匀,可以令深度变量为条件变量,绘制条件分割图,观察在不同条件下地震发生地点(经纬度)是否有变化。图示上方是用矩形条标记出来的条件变量的取值范围,下方是条件散点图,从图中可以清楚地看出,随着深度值的增加,地震发生地点逐渐由西向东、由南向北移动,震源较深的地震都发生在离斐济岛很近的东南侧。

七、其他函数

以上六个函数很大程度上可以满足我们对相关关系可视化的需求,此外,R还提供了众多相关函数,下面选取了几个函数帮助文档中的实例进行简单介绍以作了解。

1、splom {lattice}

基于lattice作图系统,也可以通过进一步的设置达到更高的可视化要求。

library(lattice)

super.sym <- trellis.par.get("superpose.symbol")

splom(~iris[1:4], groups = Species, data = iris,

panel = panel.superpose,

key = list(title = "Three Varieties of Iris",

columns = 3,

points = list(pch = super.sym$pch[1:3],

col = super.sym$col[1:3]),

text = list(c("Setosa", "Versicolor", "Virginica"))))

2、scatterplotMatrix {car}

可以直接指定主对角线上的图形元素(密度图、箱线图、直方图、QQ图等),还可以在散点图中添加拟合曲线、平滑曲线、相关读椭圆等。

library(car)

scatterplotMatrix(~ income + education + prestige | type, data=Duncan)

3、ggscatmat {GGally}

简化版的ggpairs,只有五个参数:数据源、观测范围设定、颜色、透明度及相关度计算方法。

library(GGally)

data(flea)

ggscatmat(flea, columns = 2:4, color = "species")

4、cpairs {gclus}

library(gclus)

data(USJudgeRatings)

judge.cor <- cor(USJudgeRatings)

judge.color <- dmat.color(judge.cor)

cpairs(USJudgeRatings,panel.colors=judge.color,pch=".",gap=.5)

 往期精彩内容整理合集 

2017年R语言发展报告(国内)

R语言中文社区历史文章整理(作者篇)

R语言中文社区历史文章整理(类型篇)

公众号后台回复关键字即可学习

回复 R                  R语言快速入门及数据挖掘 
回复 Kaggle案例  Kaggle十大案例精讲(连载中)
回复 文本挖掘      手把手教你做文本挖掘
回复 可视化          R语言可视化在商务场景中的应用 
回复 大数据         大数据系列免费视频教程 
回复 量化投资      张丹教你如何用R语言量化投资 
回复 用户画像      京东大数据,揭秘用户画像
回复 数据挖掘     常用数据挖掘算法原理解释与应用
回复 机器学习     人工智能系列之机器学习与实践
回复 爬虫            R语言爬虫实战案例分享

R语言相关关系可视化函数梳理相关推荐

  1. R语言相关关系可视化函数梳理(附代码)

    来源:R语言中文社区 作者:赵镇宁 本文约3177字,建议阅读6分钟. 本文为你介绍R语言相关关系可视化的函数进行了初步梳理,大家可根据个人需求及函数功能择优选择. 当考察多个变量间的相关关系时,通常 ...

  2. R语言数据关系可视化添加模型方程式及模型R方指标实战

    R语言数据关系可视化添加模型方程式及模型R方指标实战 目录 R语言数据关系可视化添加模型方程式及模型R方指标实战

  3. R语言——相关系数矩阵可视化(大全)

    相关系数分析在很多领域都有涉及,而可视化则是对其结果最好的体现.不过我的能力有限,目前的水平也仅整合了3个包.欢迎大家指导评价. 1. corrplot包 获取数据及相关性分析. coo <- ...

  4. R语言ggpubr包ggsummarystats函数可视化分组条形图(自定义分组颜色、添加抖动数据点jitter、误差条)并在X轴标签下方添加分组对应的统计值(样本数N、中位数、四分位数的间距iqr)

    R语言ggpubr包ggsummarystats函数可视化分组条形图(自定义分组颜色.添加抖动数据点jitter.误差条error bar)并在X轴标签下方添加分组对应的统计值(样本数N.中位数med ...

  5. R语言ggplot2使用geom_line函数geom_point函数可视化哑铃图、并对哑铃图进行排序(reorder dumbbell plot)

    R语言ggplot2使用geom_line函数geom_point函数可视化哑铃图.并对哑铃图进行排序(reorder dumbbell plot) 目录

  6. R语言配对图可视化:pivot_longer函数将宽格式的数据重塑为长格式并进行数据全连接和左连接(left join)、配对图可视化(根据分类变量的值为散点图上的数据点添加颜色)

    R语言配对图可视化:pivot_longer函数将宽格式的数据重塑为长格式并进行数据全连接和左连接(left join).配对图可视化(根据分类变量的值为散点图上的数据点添加颜色,Add color ...

  7. R语言使用ggplot2可视化交叉曲线(Curved lines defined with functions):基于自定义函数可视化交叉曲线、使用curve_intersect函数计算曲线交叉点

    R语言使用ggplot2可视化交叉曲线(Curved lines defined with functions):基于自定义函数可视化交叉曲线.使用curve_intersect函数计算曲线交叉点 目 ...

  8. R语言使用ggplot2可视化贝塞尔曲线:基于经验数据可视化贝塞尔曲线(Curved Bézier lines with empirical data)、使用curve_intersect函数计算曲线

    R语言使用ggplot2可视化贝塞尔曲线:基于经验数据可视化贝塞尔曲线(Curved Bézier lines with empirical data).使用curve_intersect函数计算曲线 ...

  9. R语言survival包coxph函数构建cox回归模型、ggrisk包ggrisk函数可视化Cox回归的风险评分图、使用风险得分的中位数计算最佳截断值cutoff(基于LIRI基因数据集)

    R语言survival包coxph函数构建cox回归模型.ggrisk包ggrisk函数可视化Cox回归的风险评分图.使用风险得分的中位数计算最佳截断值cutoff(基于LIRI基因数据集) 目录

  10. R语言时间序列数据可视化: 使用plot函数可视化单序列时间序列数据、多序列时间序列数据并指定不同时间序列的线条类型(lty)

    R语言时间序列数据可视化: 使用plot函数可视化单序列时间序列数据.多序列时间序列数据并指定不同时间序列的线条类型(lty) 目录

最新文章

  1. php和python哪个用了开发web好-web开发选择Python还是PHP好呢?
  2. iBATIS.NET 学习笔记(五)
  3. Java ClassLoader
  4. jenkins与SonarQube集成
  5. Java之时间格式转换
  6. Linux下播放器开发-交叉编译Mplayer
  7. 计算机组装物料清单,物料清单
  8. html 360登录自动填写,怎么让360安全浏览器记住以前登陆过的帐号和密码,每次都填很麻烦...
  9. 义隆单片机CALL 与JMP的区别
  10. 计算机自我介绍英语范文,计算机面试英文自我介绍范文
  11. 数字化转型导师坚鹏:数字化时代企业管理变革与创新营销
  12. 微信小程序 - video组件poster无效 / 视频播放列表
  13. linux运维工程师 倒班,运维人员值班制度
  14. Elasticsearch分页解决方案研究
  15. PS5运行Linux,索尼发布新驱动 PS5手柄现已支持Linux系统用户
  16. oracle sql execute elapsed time,sql duration 和 elapsed_time 的区别
  17. 博客园自定义markdown样式
  18. 海思 DSP xtensa xplorer
  19. 深度卷积神经网络演化历史及结构改进脉络-40页长文全面解读
  20. 计算机的图形图像文件格式,常见图形图像文件格式.ppt

热门文章

  1. iOS 将本地项目/demo上传到github的简单方法
  2. 代码调试神器:VS Code 开源新工具!
  3. 一篇全面的 MySQL 高性能优化实战总结!
  4. 仅限今天,《Linux就该这么学》半价优惠仅需39.5元。
  5. 为什么100offer坚持私密招聘?
  6. vmware10中开启Intel VT-x
  7. Solr -- 实时搜索
  8. (cocos2dx-3.3)3D坐标系
  9. Java编程风格与命名规范整理(转载)
  10. 一个支持CGI的极简WebServer