R语言之可视化(25)绘制相关图(ggcorr包)

介绍

ggcorr函数是一个可视化函数,用于将矩阵绘制为ggplot2图片。

为何使用ggcorr包

相关矩阵显示相对大量连续变量之间的相关系数。 然而,虽然R提供了一种通过cor函数创建这种矩阵的简单方法,但它没有为该函数创建的矩阵提供绘图方法。ggcorr函数提供了这样的绘图方法,使用ggplot2包中实现的“图形语法”来渲染绘图。 在实践中,其结果在图形上接近于corrplot函数的结果,这是优秀的arm包的一部分。

安装

ggcorr可通过GGally包获得:

install.packages("GGally")
nba = read.csv("http://datasets.flowingdata.com/ppg2008.csv")
head(nba)
library(ggplot2)
library(GGally)
ggcorr(nba)

(1)ggcorr的第一个参数叫做输入数据。一般输入数据为数据框dataframe格式。 (2)这里出现了警告,原因是非数字的列是不能狗计算相关性的。因此它做相关性绘图时自动排除了非数字列:‘name’列

相关方法

ggcorr支持cor函数提供的所有相关方法。该方法由method参数控制。

  • 在相关矩阵中需要考虑的第一个设置是选择要使用的观测值。此设置可能采用以下任何值:“everything”,“all.obs”,“complete.obs”, “na.or.complete”或“pairwise.complete.obs”(ggcorr使用的默认值)。这些设置控制在存在缺失值时如何计算协方差。它们之间的区别在cor函数的文档中有解释。
  • ggcorr需要的第二个设置是要计算的相关系数的类型。它有三个可能的值:“pearson”(ggcorr和cor使用的默值),“kendall”或“spearman”。同样,每个设置之间的差异在cor函数的文档中进行了解释。一般来说,默认选择应为“pearson”,它会根据Pearson方法生成相关系数。

以下是一些示例,说明如何将不同的关联方法传递给ggcorr:

# Pearson correlation coefficients, using pairwise observations (default method)
ggcorr(nba[, -1], method = c("pairwise", "pearson"))
# Pearson correlation coefficients, using all observations
ggcorr(nba[, -1], method = c("everything", "pearson"))
# Kendall correlation coefficients, using complete observations
ggcorr(nba[, -1], method = c("complete", "kendall"))
# Spearman correlation coefficients, using strictly complete observations
ggcorr(nba[, -1], method = c("all.obs", "spearman"))

如果没有提供第二个参数,ggcorr将默认为“pearson”。

绘制参数

其余的这些小插图侧重于如何调整ggcorr绘制的相关矩阵的方面。

控制色标

默认情况下,ggcorr使用从-1到+1的连续色标来显示矩阵中表示的每个相关的强度。 要切换到分类颜色,用户所要做的就是添加nbreaks参数,该参数指定颜色标度中应包含的断点数:

ggcorr(nba[, 2:15], nbreaks = 5)

使用nbreaks参数时,颜色标度中显示的位数通过digits参数控制。 digits参数默认为两位数,但如上例所示,如果中断不需要更高的精度,则默认为一位数。

对色阶的进一步控制包括name参数(用于设置其标题),legend.size参数(用于设置图例文本的大小)和legend.position参数(用于控制图例的显示位置)。 后两个只是ggplot2主题中相同参数的快捷方式,由于该图是一个ggplot2对象,所有其他相关的主题和指南方法也适用:

ggcorr(nba[, 2:15], 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))

控制调色板

ggcorr使用默认的颜色渐变,从亮红色到浅灰色到亮蓝色。 可以通过low,mid和high参数修改此渐变,这与ggplot2中的scale_gradient2控制器类似:

ggcorr(nba[, 2:15], low = "steelblue", mid = "white", high = "darkred")

默认情况下,渐变的中点设置为0,表示无相关关系。 中点参数可用于修改此设置。 特别是,将中点设置为NULL将自动选择中值相关系数作为中点,并将向用户显示该值:

ggcorr(nba[, 2:15], midpoint = NULL)

控制色标颜色的最后一个选项是通过palette参数使用ColorBrewer调色板。 但是只有在使用nbreaks参数的前提时,才能使用palette参数:

ggcorr(nba[, 2:15], nbreaks = 4, palette = "RdGy")

注意:尝试在颜色标度上使用ColorBrewer调色板时,调色板中的颜色比调色板中的颜色多,将向用户返回警告(实际上是两个相同的警告)。

控制主要形状

默认情况下,ggcorr使用颜色来表示相关系数的强度,其方式与热图中的颜色深浅表示观察数值大小的方式类似。但是ggcorr也可以将相关性表示为大小不同的圆圈,只需将其geom参数设置为“circle”:

ggcorr(nba[, 2:15], geom = "circle", nbreaks = 5)

此外,用户可以通过min_size和max_size参数设置圆的最小和最大大小:

在该小插图的末尾示出了对ggcorr的几何形状的附加控制。

控制系数标签

ggcorr可以通过将label参数设置为TRUE来在相关图上显示变量之间的确切相关系数:

ggcorr(nba[, 2:15], label = TRUE)

label_color和label_size参数允许设置系数标签的样式:

ggcorr(nba[, 2:15], nbreaks = 4, 
       palette = "RdGy", label = TRUE, 
       label_size = 3, label_color = "white")

控制变量标签

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

ggcorr(nba[, 2:15], hjust = 0.75, size = 5, color = "grey50")

相关矩阵中的变量标签可能出现的一个问题是它们太长而无法在图的左下方完整显示。 如下图所示MIN变量似乎在绘图的最左下角被遮盖了:

ggcorr(nba[, 3:16], hjust = 0.75, size = 5, color = "grey50")

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

ggcorr(nba[, 3:16], hjust = 0.75, size = 5, color = "grey50", layout.exp = 1)

其他参数

  • 颜色范围,在某些情况下,修改相关系数的显示(-1,+ 1)范围可能是有用的。 当色标是连续色彩渐变时,可以通过将limits参数设置为FALSE来实现:
ggcorr(nba[, 2:15], limits = FALSE)

设置相关系数的样式

如果ggcorr的geom参数设置为“text”,它将相关系数表示为它们的值:

ggcorr(nba[, 2:15], geom = "text", 
nbreaks = 5, 
palette = "RdYlBu",
 hjust = 1)
ggcorr(nba[, 2:15], geom = "text", 
nbreaks = 5, palette = "RdYlBu",
 hjust = 1, label = TRUE, label_alpha = 0.5)

控制内部值

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

head(ggcorr(nba[, 2:15])$data, 5)

在相关图上突出显示较高相关系数

如下例所示,其中使用不同颜色的负系数和正系数突出显示优于0.5或低于-0.5的所有相关系数:

ggcorr(nba[, 2:15], 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)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券