R语言 | 相关性热图
ggcor包
*\# 安装ggcor包*
*\# install.packages(\"devtools\")*
*\# library(devtools)*
*#devtools::install_git(\"https://gitee.com/kingjames23/ggcor_1\")*
一、生成简要相关性热图
\# 加载ggcor包,这是一个用于创建相关性矩阵可视化的R包
library(ggcor)
library(ggplot2)
\# 显示quickcor函数的所有参数,用于查看函数的用法和可用参数
args(quickcor)
\# 使用mtcars数据集调用quickcor函数,计算并展示相关性矩阵
\# mtcars是R中内置的数据集,包含了汽车的燃油消耗和其他变量
quickcor(mtcars) +
\# 添加颜色几何图层,根据相关系数的大小为相关性矩阵中的每个单元格着色
geom_colour() +
\# 设置颜色填充的比例尺,使用彩虹色的反转来创建颜色渐变
scale_fill_gradientn(colours=rev(rainbow(100))) +
\# 调整主题元素,特别是x轴底部的文本,使其水平并右对齐
theme(axis.text.x.bottom = element_text(angle = 0, hjust = 1))
rainbow() 是 R中的一个函数,用于生成一系列颜色的调色板。这个函数非常适合用来创建多彩的颜色序列,特别是在需要可视化数据时为不同的数据点或类别分配不同颜色的情况下。
Color Palettes
Description
Create a vector of n contiguous colors.
Usage
hcl.colors(n, palette = “viridis”, alpha = NULL, rev = FALSE, fixup =
TRUE)
hcl.pals(type = NULL)
rainbow(n, s = 1, v = 1, start = 0, end = max(1, n - 1)/n,
alpha, rev = FALSE)
heat.colors(n, alpha, rev = FALSE)
terrain.colors(n, alpha, rev = FALSE)
topo.colors(n, alpha, rev = FALSE)
cm.colors(n, alpha, rev = FALSE)
rainbow(n, s = 1, v = 1, start = 0, end = max(1, n - 1) / n, alpha = 1)
# 参数说明
# n:一个整数,指定要生成的颜色数量。
# s:饱和度,取值范围在 [0, 1] 之间,默认值为 1(完全饱和)。
# v:亮度,取值范围在 [0, 1] 之间,默认值为 1(最亮)。
# start:起始色调,以弧度表示,默认从 0 开始,即红色。
# end:结束色调,以弧度表示,默认根据 n
的值来计算,确保颜色分布均匀。
# alpha:透明度,取值范围在 [0, 1] 之间,默认值为 1(不透明)。
\# 加载ggcor包,这是一个用于创建相关性矩阵可视化的R包
library(ggcor)
library(ggplot2)
\# 使用mtcars数据集调用quickcor函数,计算并展示相关性矩阵
quickcor(mtcars) +
\# 添加颜色几何图层,根据相关系数的大小为相关性矩阵中的每个单元格着色
geom_colour() +
\# 使用scale_fill_gradient2函数设置颜色填充的比例尺,创建颜色渐变
scale_fill_gradient2(low = \"blue\", mid = \"white\", high = \"red\",
midpoint = 0, limit = c(-1, 1), space = \"Lab\", name = \"Correlation\")
+
\# 调整主题元素,特别是x轴底部的文本,使其水平并右对齐
theme(axis.text.x.bottom = element_text(angle = 0, hjust = 1))
设置了颜色渐变的参数,包括low(低值颜色)、mid(中间值颜色)、high(高值颜色)以及midpoint(中间点的值)
scale_colour_gradient {ggplot2}
Gradient colour scales
Description
scale_*_gradient creates a two colour gradient
(low-high), scale_*_gradient2 creates a diverging colour gradient
(low-mid-high), scale_*_gradientn creates a n-colour gradient. For
binned variants of these scales, see the color
steps scales.
Usage
scale_colour_gradient(
name = waiver(),
…,
low = “#132B43”,
high = “#56B1F7”,
space = “Lab”,
na.value = “grey50”,
guide = “colourbar”,
aesthetics = “colour”
)
scale_fill_gradient(
name = waiver(),
…,
low = “#132B43”,
high = “#56B1F7”,
space = “Lab”,
na.value = “grey50”,
guide = “colourbar”,
aesthetics = “fill”
)
scale_colour_gradient2(
name = waiver(),
…,
low = muted(“red”),
mid = “white”,
high = muted(“blue”),
midpoint = 0,
space = “Lab”,
na.value = “grey50”,
transform = “identity”,
guide = “colourbar”,
aesthetics = “colour”
)
scale_fill_gradient2(
name = waiver(),
…,
low = muted(“red”),
mid = “white”,
high = muted(“blue”),
midpoint = 0,
space = “Lab”,
na.value = “grey50”,
transform = “identity”,
guide = “colourbar”,
aesthetics = “fill”
)
scale_colour_gradientn(
name = waiver(),
…,
colours,
values = NULL,
space = “Lab”,
na.value = “grey50”,
guide = “colourbar”,
aesthetics = “colour”,
colors
)
scale_fill_gradientn(
name = waiver(),
…,
colours,
values = NULL,
space = “Lab”,
na.value = “grey50”,
guide = “colourbar”,
aesthetics = “fill”,
colors
二、添加相关性系数
\# 使用mtcars数据集调用quickcor函数,计算并展示相关性矩阵
\# mtcars是R中内置的数据集,包含了汽车的燃油消耗和其他变量
quickcor(mtcars) +
\# 添加颜色几何图层,根据相关系数的大小为相关性矩阵中的每个单元格着色
geom_colour() +
\# 添加数值型文本,显示每个单元格的相关系数数值
\# aes(num = r) 指定了文本内容为相关系数r
geom_number(aes(num = r)) +
\# 使用scale_fill_gradientn函数设置颜色填充的比例尺,创建颜色渐变
\# 这里使用彩虹色的反转来表示相关性的强度
\# 注意:scale_fill_gradientn
可能不是ggplot2中的函数,这里假设它是正确的
scale_fill_gradientn(colours = rev(rainbow(100))) +
\# 调整主题元素,特别是x轴底部的文本,使其水平并右对齐
theme(axis.text.x.bottom = element_text(angle = 0, hjust = 1))
Significant marks Geom
**Description**
Significant marks Geom
**Usage**
geom_mark(
mapping = NULL,
data = NULL,
stat = \"identity\",
position = \"identity\",
\...,
nudge_x = 0,
nudge_y = 0,
digits = 2,
nsmall = 2,
sig.level = c(0.05, 0.01, 0.001),
mark = c(\"\*\", \"\*\*\", \"\*\*\*\"),
sig.thres = NULL,
sep = \"\",
parse = FALSE,
na.rm = FALSE,
show.legend = NA,
inherit.aes = TRUE
)
geom_mark2(\...)
1. mapping:
指定aes(美学)映射,用于定义如何将数据映射到图形上。通常包括x和y的映射。
2. data: 指定用于绘图的数据集。如果未指定,将使用当前的ggplot数据。
3. stat:
指定用于计算几何对象的统计变换。默认是\"identity\",意味着不进行变换。
4. position:
指定位置调整,用于调整几何对象的位置。默认是\"identity\",意味着不进行调整。
5. \...: 其他参数,可以传递给stat或geom函数。
6. nudge_x: 水平方向上的微调距离,用于调整标记的位置。
7. nudge_y: 垂直方向上的微调距离,用于调整标记的位置。
8. digits: 指定显示的数字位数。
9. nsmall: 指定小数点后的位数。
10. sig.level:
指定显著性水平的阈值,用于确定哪些相关性是显著的。默认是c(0.05,
0.01, 0.001)。
11. mark: 指定显著性标记的符号。默认是c(\"*\", \"**\",
\"***\"),分别对应不同的显著性水平。
12. sig.thres: 指定显著性阈值,用于过滤不显著的相关性。
13. sep: 指定数字和显著性标记之间的分隔符。
14. parse:
逻辑值,指定是否解析文本。如果为TRUE,可以解析文本中的表达式。
15. na.rm: 逻辑值,指定是否移除NA值。
16. show.legend:
逻辑值或字符串,指定是否显示图例。NA表示根据其他参数自动决定。
17. inherit.aes: 逻辑值,指定是否继承ggplot对象的美学映射。默认为TRUE。
)
三、添加显著性性标志
当quickcor函数中的cor.test参数设置为TRUE时,会为相关性矩阵中的每个单元格执行显著性测试,这为添加显著性标志提供了基础
\# 使用mtcars数据集调用quickcor函数,计算并展示相关性矩阵
\# cor.test = TRUE 表示为相关性矩阵中的每个单元格执行显著性测试
quickcor(mtcars, cor.test = TRUE) +
\# 添加颜色几何图层,根据相关系数的大小为相关性矩阵中的每个单元格着色
geom_colour() +
\# 添加标记几何图层,显示相关系数及显著性
\# geom_mark()
会在每个单元格中添加一个标记,通常用于显示相关系数的值和显著性
geom_mark() +
\# 使用scale_fill_gradientn函数设置颜色填充的比例尺,创建颜色渐变
\# 这里使用彩虹色的反转来表示相关性的强度
scale_fill_gradientn(colours = rev(rainbow(100))) +
\# 调整主题元素,特别是x轴底部的文本,使其水平并右对齐
theme(axis.text.x.bottom = element_text(angle = 0, hjust = 1))
四、设置相关性图标表示相关性大小
1.方形
\# 使用mtcars数据集调用quickcor函数,计算并展示相关性矩阵
\# cor.test = TRUE 表示为相关性矩阵中的每个单元格执行显著性测试
quickcor(mtcars, cor.test = TRUE) +
\# 添加方形几何图层,用于显示相关性矩阵中的单元格
geom_square() +
\# 添加标记几何图层,显示相关系数及显著性
\# geom_mark()
会在每个单元格中添加一个标记,通常用于显示相关系数的值和显著性
geom_mark() +
\# 使用scale_fill_gradientn函数设置颜色填充的比例尺,创建颜色渐变
\# 这里使用彩虹色的反转来表示相关性的强度
scale_fill_gradientn(colours = rev(rainbow(100))) +
\# 调整主题元素,特别是x轴底部的文本,使其水平并右对齐
theme(axis.text.x.bottom = element_text(angle = 0, hjust = 1))
2.星形
\# 使用mtcars数据集调用quickcor函数,计算并展示相关性矩阵
\# cor.test = TRUE 表示为相关性矩阵中的每个单元格执行显著性测试
quickcor(mtcars, cor.test = TRUE) +
\# 添加方形几何图层,用于显示相关性矩阵中的单元格
geom_star() +
\# 添加标记几何图层,显示相关系数及显著性
\# geom_mark()
会在每个单元格中添加一个标记,通常用于显示相关系数的值和显著性
geom_mark() +
\# 使用scale_fill_gradientn函数设置颜色填充的比例尺,创建颜色渐变
\# 这里使用彩虹色的反转来表示相关性的强度
scale_fill_gradientn(colours = rev(rainbow(100))) +
\# 调整主题元素,特别是x轴底部的文本,使其水平并右对齐
theme(axis.text.x.bottom = element_text(angle = 0, hjust = 1))
还可以画饼图、环图、圆圈图等
# geom_star() +
# geom_circle2() +
# geom_pie2() +
geom_ring() +
五、一半显示数字,一半显示图形
library(ggplot2)
library(ggcor)
\# 使用quickcor函数生成mtcars数据集的相关性矩阵图,并执行相关性检验
\# cor.test = TRUE 参数指定在每个单元格中显示相关性检验的结果
quickcor(mtcars, cor.test = TRUE) +
\# 添加方形几何元素表示下三角部分的数据(不包括对角线)
geom_square(data = get_data(type = \"lower\", show.diag = FALSE)) +
\# 在上三角部分添加标记(不包括对角线),大小为2.5
geom_mark(data = get_data(type = \"upper\", show.diag = FALSE), size =
2.5) +
\# 添加一条斜率为-1,截距为12的参考线
geom_abline(slope = -1, intercept = 12) +
\# 设置颜色填充,这里使用了反向的彩虹色谱
scale_fill_gradientn(colours = rev(rainbow(100)))
六、mantel test相关性热图
\# 加载所需的库
library(ggcor)
library(tidyverse)
\# 使用内置的mtcars数据集
mt \<- mtcars
\# 从mtcars中选取特定列创建两个子集
df1 \<- mt\[, c(\'mpg\', \'qsec\', \"gear\")\] \# 第一个子集:mpg, qsec,
gear
df2 \<- mt\[, c(\'cyl\', \'disp\', \'hp\', \'drat\', \'wt\', \'vs\',
\'am\', \"carb\")\] \# 第二个子集:其他变量
\# 绘制df2内部变量间的完整相关性图,并添加方形样式
p1 \<- ggcor::quickcor(df2, type = \"full\") +
geom_square()
\# 绘制df2内部变量间的相关性图,仅显示上三角部分,并添加圆圈标记和对角线
p2 \<- quickcor(df2, cor.test = TRUE) + \# 执行相关性测试
geom_circle2(data = get_data(type = \"lower\", show.diag = FALSE)) + \#
圆形标记
geom_mark(data = get_data(type = \"upper\", show.diag = FALSE), size =
2.5) + \# 上三角标记
geom_abline(slope = -1, intercept = 8) \# 添加斜率为-1的直线
\# 计算df1与df2之间的相关性,并进行格式化
link_cor \<- correlate(df1, df2, cor.test = TRUE) %\>%
as_cor_tbl() %\>%
select(spec = .row.names, env = .col.names, r, p.value) %\>%
mutate(
rd = cut(r, breaks = c(-Inf, 0.2, 0.4, Inf), labels = c(\"\< 0.2\",
\"0.2 - 0.4\", \"\>= 0.4\")), \# 相关系数分段
pd = cut(p.value, breaks = c(-Inf, 0.01, 0.05, Inf), labels = c(\"\<
0.01\", \"0.01 - 0.05\", \"\>= 0.05\")) \# p值分段
)
\# 绘制df2内部变量间的上三角相关性图,并添加链接线
p3 \<- quickcor(df2, type = \"upper\", cor.test = TRUE) + \#
仅显示上三角
geom_square() + \# 方形样式
geom_mark(size = 2.5) + \# 标记
ggcor::anno_link(data = link_cor, aes(color = pd, size = rd)) + \#
添加链接线
scale_size_manual(values = c(0.5, 1, 2)) + \# 手动设置大小
scale_fill_gradient2(midpoint = 0.5, low = \"#80B1D3\", mid = \"white\",
high = \"#8214A0\", space = \"Lab\") + \# 填充色渐变
scale_fill_gradientn(colours = rev(rainbow(100))) + \# 另一种填充色方案
theme(axis.text.x.top = element_text(angle = 0, hjust = 1)) \#
调整X轴顶部文本角度
\# 显示图表
p1
p2
p3
七、聚类树状热图
\# 加载所需的包
library(ambient) # 用于生成随机相关矩阵
library(ggcor) # 用于绘制相关性热图
library(dplyr) # 提供管道操作符 %\>%
library(ggplot2) # 用于绘图和颜色渐变
\#
生成100个样本、8个变量的随机相关矩阵,并使用管道操作符将结果传递给下一个函数
rand_correlate(100, 8) %\>%
\# 使用quickcor函数绘制圆形相关性热图,启用聚类和打开角度为45度
quickcor(circular = TRUE, cluster = TRUE, open = 45) +
\# 设置颜色为白色,大小为0.125
geom_colour(colour = \"white\", size = 0.125) +
\# 添加行树状图以显示行之间的层次聚类关系
anno_row_tree() +
\# 添加列树状图以显示列之间的层次聚类关系
anno_col_tree() +
\# 设置x轴参数
set_p\_xaxis() +
\# 设置y轴参数
set_p\_yaxis() +
\# 设置填充颜色渐变,这里使用了反向的彩虹色谱
scale_fill_gradientn(colours = rev(rainbow(100)))
LInkT包
一、相关性热图
\# 使用mtcars数据集创建matrix_data对象
matrix_data(list(mtcars = mtcars))
\# 将mtcars转换为md_tbl格式
mtcars_matrix_data \<- matrix_data(list(mtcars = mtcars)) %\>%
as_md_tbl()
\# 为什么需要转换?
\# 标准化:md_tbl 可能是 linkET
包中的一种标准化格式,使得所有数据都以一致的方式存储和处理。
\# 功能增强:md_tbl
格式可能附带了一些额外的功能,比如自动添加表头、行名,或者支持特定的数据操作方法。
\# 兼容性:某些 linkET 包中的函数可能只接受 md_tbl
格式的数据作为输入,因此需要进行转换。
\# 将mtcars直接转换为matrix_data对象
as_matrix_data(mtcars)
\# 将mtcars直接转换为md_tbl格式
as_md_tbl(mtcars)
\# 计算mtcars的相关矩阵并转换为matrix_data对象
correlate(mtcars) %\>%
as_matrix_data()
\# 计算mtcars的相关矩阵并转换为md_tbl格式
correlate(mtcars) %\>%
as_md_tbl()
\# 加载所需的包
library(linkET)
library(ggplot2)
\# 计算mtcars的相关矩阵
mtcars_corr \<- cor(mtcars)
\# 设置相关性图的样式
set_corrplot_style()
\# 绘制mtcars数据集的相关性图
p \<- qcorrplot(mtcars_corr, is_corr = TRUE) + \#
使用相关矩阵,并设置is_corr参数
geom_square() + \# 添加方形标记
scale_fill_gradientn(colours = rev(rainbow(100))) + \#
使用反转的彩虹色谱
ggtitle(\"Correlation Matrix of mtcars Dataset\") + \# 添加图表标题
labs(x = \"Variables\", y = \"Variables\") + \# 添加轴标签
theme(
legend.position = \"right\", \# 将图例放在右侧
plot.title = element_text(hjust = 0.5), \# 居中对齐标题
axis.text.x = element_text(angle = 45, hjust = 1) \# 调整X轴文本角度
)
\# 显示图表
print(p)
\# 加载必要的包
library(linkET)
library(ggplot2)
library(vegan)
\# 载入数据集
data(\"varespec\")
data(\"varechem\")
\# 计算varespec与varechem之间的相关性矩阵
correlation_matrix \<- cor(varespec\[1:30\], varechem, method =
\"pearson\")
\# 绘制qcorrplot
qcorrplot(correlation_matrix, is_corr = TRUE) + \# 设置is_corr参数
geom_square() +
scale_fill_gradientn(colours=rev(rainbow(100))) \# 使用彩虹色谱
\# is_corr =TRUE被明确地传递给qcorrplot函数,以表明输入数据确实是一个相关矩阵。
\# 同时,我们确保了scale_fill_gradientn只被调用一次,这样就不会出现重复定义填充颜色刻度的问题。
\# 使用varespec数据集的前30行创建下三角qcorrplot
varespec_correlation_matrix \<- cor(varespec\[1:30\], method =
\"pearson\")
qcorrplot(varespec_correlation_matrix, type = \"lower\", is_corr =
TRUE) + \# 设置is_corr参数
geom_square() +
scale_fill_gradientn(colours=rev(rainbow(100))) \# 使用彩虹色谱
二、Mantel Test
1.热图
\# 加载必要的包
library(linkET)
library(ggplot2)
library(vegan)
library(dplyr)
\# 从vegan包中加载varechem和varespec数据集
data(\"varechem\", package = \"vegan\")
data(\"varespec\", package = \"vegan\")
\# 执行Mantel检验
\# varespec和varechem是进行Mantel检验的数据集
\# spec_select参数用来指定不同的物种组
mantel \<- mantel_test(varespec, varechem,
spec_select = list(Spec01 = 1:7, Spec02 = 8:18, Spec03 = 19:37, Spec04 =
38:44)) %\>%
\# 根据Mantel\'s r值将数据分段
mutate(rd = cut(r, breaks = c(-Inf, 0.2, 0.4, Inf), labels = c(\"\<
0.2\", \"0.2 - 0.4\", \"\>= 0.4\")),
\# 根据Mantel\'s p值将数据分段
pd = cut(p, breaks = c(-Inf, 0.01, 0.05, Inf), labels = c(\"\< 0.01\",
\"0.01 - 0.05\", \"\>= 0.05\")))
\# 绘制下三角相关性图
qcorrplot(correlate(varechem), type = \"lower\", diag = FALSE) +
\# 添加方形表示
geom_square() +
\# 添加连接线,颜色根据Mantel\'s p值,大小根据Mantel\'s r值
geom_couple(aes(colour = pd, size = rd), data = mantel, curvature =
nice_curvature()) +
\# 设置填充颜色渐变
scale_fill_gradientn(colours=rev(rainbow(100))) +
\# 手动设置点的大小
scale_size_manual(values = c(0.5, 1, 2)) +
\# 手动设置线条的颜色
scale_colour_manual(values = color_pal(3)) +
\# 自定义图例
guides(size = guide_legend(title = \"Mantel\'s r\", override.aes =
list(colour = \"grey35\"), order = 2),
colour = guide_legend(title = \"Mantel\'s p\", override.aes = list(size
= 3), order = 1),
fill = guide_colorbar(title = \"Pearson\'s r\", order = 3))
2.设置图例中相关性系数的显示范围
在使用qcorrplot绘制相关性图时,如果你想要设置图例中相关性系数的显示范围,可以通过scale_fill_gradientn函数来控制。这个函数允许你自定义颜色渐变,并且可以指定颜色对应的相关性系数范围。
\# 加载必要的包
library(dplyr)
library(ggplot2)
library(vegan)
library(linkET) \# 确保linkET包已加载
\# 载入数据集
data(\"varechem\", package = \"vegan\")
\# 计算varechem之间的相关性矩阵
correlation_matrix \<- cor(varechem, method = \"pearson\")
\# 绘制下三角相关性图
qcorrplot(correlation_matrix, type = \"lower\", diag = FALSE) +
geom_square() +
scale_fill_gradientn(
colours = rev(rainbow(100)), \# 使用彩虹色谱
limits = c(-1, 1), \# 设置相关性系数的显示范围
breaks = seq(-1, 1, by = 0.2), \# 设置刻度线的位置
guide = guide_colorbar(title = \"Pearson\'s r\") \# 设置图例标题
)
limits参数被用来设置填充颜色所代表的相关性系数的范围为-1到1。breaks参数用于定义颜色条上刻度的具体位置,这里设置了每0.2一个刻度。guide参数用于设置图例的颜色条标题。
3.更多定制选项
qcorrplot(correlation_matrix, type = \"lower\", diag = FALSE) +
geom_square() +
scale_fill_gradientn(
colours = rev(rainbow(100)),
limits = c(-1, 1),
breaks = seq(-1, 1, by = 0.2),
guide = guide_colorbar(
title = \"Pearson\'s r\",
title.position = \"top\", \# 将标题放在顶部
title.hjust = 0.5, \# 标题水平居中
barwidth = 20, \# 颜色条宽度
barheight = 400, \# 颜色条高度
direction = \"horizontal\" \# 水平方向的颜色条
)
)