相关图之ggplot系列扩展2

由于corrplot包画图存在一些问题,比如图像不美观,以及title显示不出,等等

于是有了ggplot2 的扩展系列

ggcorrplot包 专门画相关系数矩阵图: https://github.com/kassambara/ggcorrplot

GGally 包: 对ggplot2进行了更多的扩展,其中包括相关系数图: http://ggobi.github.io/ggally/index.html#alterations

GGally::ggcorr()函数

介绍

ggcorr函数是一个可视化函数,用于将相关矩阵绘制为ggplot2对象。它的灵感来自Stack Overflow问题

解释

相关矩阵显示了相对大量的连续变量之间的相关系数。然而,虽然R提供了一种通过cor函数创建这种矩阵的简单方法,但它没有为该函数创建的矩阵提供绘图方法。

ggcorr功能提供了这样的绘图方法,使用ggplot2包中实现的“图形语法” 来渲染绘图。在实践中,其结果在图形上接近corrplot功能的结果,这是优秀arm包装的一部分。

安装

install.packages("GGally")
# 或者
source("https://raw.githubusercontent.com/briatte/ggcorr/master/ggcorr.R")

依赖

主要的包依赖ggcorrggplot2用于绘图构造的包。

library(ggplot2)

ggplot2软件包可以从被安装CRAN通过install.packages。这样做也将安装reshape2包,内部ggcorr用于数据操作。

library(GGally)
ggcorr(mtcars)

ggcorr(iris) # ggcorr会自动挑选数值型变量进行画图,它还产生一个警告,指示数据集的一列不包含数字数据,因此从相关矩阵中删除。从传递给的数据集中删除列可以避免警告, eg: ggcorr(iris[,-5])
#> Warning in ggcorr(iris): data in column(s) 'Species' are not numeric and were
#> ignored

注意:当与连续色标一起使用时,ggcorr当前也会产生与色彩插值相关的警告。这是一个无害的警告,应该在未来的更新ggplot2scales包中消失。此警告隐藏在此小插图的其余部分中。

ggcorr(mtcars)# 默认接受数据框,矩阵

##  可接受相关系数矩阵
## ggcorr支持cor函数提供的所有相关方法。参考cor()函数:
## cor(x, y = NULL, use = "everything",method = c("pearson", "kendall", "spearman"))
ggcorr(data = NULL, cor_matrix = cor(mtcars, use = "everything"))

控制图例的颜色块

默认图例颜色是连续的,

若要把图例颜色分类(离散),则添加nbreaks=n参数,把相关系数从-1+1分为nbreaks=nn等分,如下:

## ggplot独立图像的分面 --devtools::install_github("thomasp85/patchwork")
library(patchwork)
p1 = ggcorr(mtcars, nbreaks = 5)


## 对色阶(图例)的控制, name控制图例的标题,legend.size控制图例文本大小,legend.position控制图例显示位置
## 后面两个参数是ggplot2中的参数,由于绘图是一个ggplot2对象,所有其他相关theme和guides方法也适用
p2 = ggcorr(mtcars, name = expression(rho), legend.position = "bottom", legend.size = 12) +
        guides(fill = guide_colorbar(barwidth = 18, title.vjust = 0.75)) +
            theme(legend.title = element_text(size = 14))
p1 + p2

控制调色板

ggcorr默认颜色从亮红色到浅灰色到亮蓝色.可以通过被修改low,midhigh参数,其类似于那些的scale_gradient2

p1 = ggcorr(mtcars)
p2 = ggcorr(mtcars, low = "steelblue", mid = "white", high = "darkred")

p1 + p2

控制图像的形状

默认情况下,ggcorr使用颜色方块来表示相关系数的强度,与热图表示观察计数的方式类似。

ggcorr也可以用圆圈表示相关性的大小。设置geom="circle"即可

ggcorr(mtcars, geom = "circle", nbreaks = 5)# 可以通过min_size和max_size参数设置圆的大小

### 控制系数标签

ggcorr通过设置label=TRUE,可以在相关矩阵之上显示相关系数:

p1 = ggcorr(mtcars, label = TRUE) 

p2 = ggcorr(mtcars, nbreaks = 4, palette = "RdGy", label = TRUE, label_size = 3, label_color = "white",label_round=1)# 在label_color和label_size参数允许样式系数标签,label_round设置系数标签中显示的位数,label_alpha=TRUE 设置标签的透明度,则透明度水平将像相关系数一样变化

p3 = ggcorr(mtcars, label = TRUE, label_size = 3, label_round = 2, label_alpha = TRUE)

p1 + p2 + p3  # patchwork包能把独立的两个图形画在一张面板上

控制变量标签(即变量名称的显示问题)

在上面的几个例子中,变量标签的渲染(在相关矩阵的对角线上示出)不一定是最佳的。要修改这些标签的方面,用户所要做的就是将所有支持的参数geom_text直接传递给ggcorr。下面的示例显示了如何在将标签向左移动并更改颜色时减小标签的大小:

相关矩阵中的变量标签可能出现的一个问题是它们太长而无法在图的左下方完整显示。下面通过使用MIN变量启动相关矩阵来说明此问题,该变量似乎在图的最左下角略微修剪:

ggcorr(mtcars, hjust = 0.75, size = 5, color = "grey50")

要解决此问题,ggcorr可以通过layout.exp参数向绘图的水平轴添加一些空白。将任何数值传递给此参数将在图的左侧添加一个或多个“不可见的图块”,这可以帮助显示具有长名称的变量:

ggcorr(mtcars, hjust = 0.75, size = 5, color = "grey50", layout.exp = 1)

其他控制

剪切相关比例

设置相关系数的样式

如果设置geom="text",则它将相关系数表示为它们的(有色)值:

ggcorr(mtcars, geom = "text", nbreaks = 5, palette = "RdYlBu", hjust = 1)

控制内部值

由于ggcorr生成ggplot2对象,因此了解如何构造对象以从中获取更具体的图可能很有用。每个ggcorr对象都包含以下data对象:

head(ggcorr(mtcars)$data, 5)
#>      x   y coefficient label
#> 2  cyl mpg  -0.8521620  -0.9
#> 3 disp mpg  -0.8475514  -0.8
#> 4   hp mpg  -0.7761684  -0.8
#> 5 drat mpg   0.6811719   0.7
#> 6   wt mpg  -0.8676594  -0.9

于是可以使用不同颜色来区分负系数和正系数:

ggcorr(mtcars, geom = "blank", label = TRUE, hjust = 0.75) +
  geom_point(size = 10, aes(color = coefficient > 0, alpha = abs(coefficient) > 0.5)) +
  scale_alpha_manual(values = c("TRUE" = 0.25, "FALSE" = 0)) +
  guides(color = FALSE, alpha = FALSE)

参考

参考: https://briatte.github.io/ggcorr/

sessionInfo()
#> R version 4.0.2 (2020-06-22)
#> Platform: x86_64-apple-darwin17.0 (64-bit)
#> Running under: macOS Mojave 10.14.5
#> 
#> Matrix products: default
#> BLAS:   /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRblas.dylib
#> LAPACK: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRlapack.dylib
#> 
#> locale:
#> [1] zh_CN.UTF-8/zh_CN.UTF-8/zh_CN.UTF-8/C/zh_CN.UTF-8/zh_CN.UTF-8
#> 
#> attached base packages:
#> [1] stats     graphics  grDevices utils     datasets  methods   base     
#> 
#> other attached packages:
#> [1] patchwork_1.0.1 GGally_2.0.0    ggplot2_3.3.2  
#> 
#> loaded via a namespace (and not attached):
#>  [1] Rcpp_1.0.5         pillar_1.4.6       compiler_4.0.2     RColorBrewer_1.1-2
#>  [5] plyr_1.8.6         tools_4.0.2        digest_0.6.25      evaluate_0.14     
#>  [9] lifecycle_0.2.0    tibble_3.0.3       gtable_0.3.0       pkgconfig_2.0.3   
#> [13] rlang_0.4.7        yaml_2.2.1         blogdown_0.20      xfun_0.17         
#> [17] withr_2.2.0        stringr_1.4.0      dplyr_1.0.1        knitr_1.29        
#> [21] generics_0.0.2     vctrs_0.3.2        grid_4.0.2         tidyselect_1.1.0  
#> [25] reshape_0.8.8      glue_1.4.1         R6_2.4.1           rmarkdown_2.3     
#> [29] bookdown_0.20      purrr_0.3.4        farver_2.0.3       magrittr_1.5      
#> [33] scales_1.1.1       ellipsis_0.3.1     htmltools_0.5.0    colorspace_1.4-1  
#> [37] labeling_0.3       stringi_1.4.6      munsell_0.5.0      crayon_1.3.4

次;