热图就是使用颜色来表示数据相关性的图。能绘制热图的R包很多,既往我们已经介绍了《R语言pheatmap包绘制热图》,今天咱们来介绍一下R语言linkET包绘制相关性组合网络热图。相关性热图的意思热图和其他数据的关联性,比较的是多数据间的内在关系。
linkET包是我们的一个国人写的,目前需要使用devtools::install_github下载,作者对包的描述是万物皆可互联,还挺有意思的。我们先下载包下来,
devtools::install_github(“Hy4m/linkET”, force = TRUE)
有时候Rstudio会提示你要更新其他的包吗?这里选3,不更新就可以了
下载好包后我们把包和数据导入,因为是相关性热图,所以需要导入两个数据
library(linkET)
library(ggplot2)
library(dplyr)
varespec<-read.csv("E:/r/test/varespec.csv",sep=',',header=TRUE)
varechem<-read.csv("E:/r/test/varechem.csv",sep=',',header=TRUE)
这两个数据来自文献Väre, H., Ohtonen, R. and Oksanen, J. (1995) Effects of reindeer grazing on understorey vegetation in dry Pinus sylvestris forests. Journal of Vegetation Science 6, 523–530
varespec 数据框有 24 行 44 列,列是 44 个物种的估计覆盖值。变量名由学名组成,数据介绍说熟悉植被类型的人一看便知,我是不知道是什么植物,反正就是植物名字。varechem 数据框有 24 行 14 列,给出了与 varespec 数据框中相同地点的土壤特性。化学测量值有明显的名称,就是一些金属元素的特征。Baresoil 表示裸土的估计覆盖率,Humdepth 表示腐殖质层的厚度。
linkET包即可绘制单独的热图,也可以绘制相关性的热图,下面咱们一一展示。
它有几个特殊的函数要先介绍一下,correlate函数可以计算数据的相关性
correlate(varechem)
也可以计算不同数据的相关性系数
correlate(varespec[1:30], varechem)
算出了相关性就能生成图形了,先来单个数据的
correlate(varechem) %>% as_md_tbl() %>% qcorrplot() +geom_square()
再来个双数据的
correlate(varespec[1:30], varechem) %>% qcorrplot() +geom_square()
进行个性配色修改
correlate(varespec[1:30], varechem) %>% qcorrplot() +geom_square() +scale_fill_gradientn(colours = RColorBrewer::brewer.pal(11, "RdBu"))
Qcorrplot函数能把系数化的矩阵图示化
qcorrplot(correlate(varechem)) +geom_square() +scale_fill_gradientn(colours = RColorBrewer::brewer.pal(11, "RdBu"))
Type系数可以控制我们取局部图形,比如我只想取下半截
qcorrplot(correlate(varechem), type = "lower") +geom_square() +scale_fill_gradientn(colours = RColorBrewer::brewer.pal(11, "RdBu"))
使用set_corrplot_style()函数和geom_square()函数还可以定制自己的风格,比如我想改方框为圆形,定义颜色为红色、蓝色和白色
set_corrplot_style(colours = c("red", "white", "blue"))
qcorrplot(correlate(varechem), type = "lower") +geom_shaping(marker = "circle")
想要从新回复成系统自定义颜色可以使用
set_default_style()
下面咱们来进行相关性的网络热图绘制,绘制前要进行一个曼特尔试验,R包作者是这样说的,相异矩阵的Mantel和偏Mantel检验。,这里注意一下spec_select选择分类的是列的引索值,varespec数据刚好44列
mantel <- mantel_test(varespec, varechem,spec_select = list(Spec01 = 1:7,Spec02 = 8:18,Spec03 = 19:37,Spec04 = 38:44))
得出每个类别的R值和P值后我们对他们进行分段表示
mantel<-mantel %>% 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, 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() +geom_couple(aes(colour = pd, size = rd), data = mantel, curvature = nice_curvature())
还可以进一步修饰,这个连接线条太粗了,不怎么美观,咱们调整一下
qcorrplot(correlate(varechem), type = "lower", diag = FALSE) +geom_square() +geom_couple(aes(colour = pd, size = rd), data = mantel, curvature = nice_curvature()) +scale_fill_gradientn(colours = RColorBrewer::brewer.pal(11, "RdBu")) +scale_size_manual(values = c(0.5, 1, 2))
自定义线条颜色
qcorrplot(correlate(varechem), type = "lower", diag = FALSE) +geom_square() +geom_couple(aes(colour = pd, size = rd), data = mantel, curvature = nice_curvature()) +scale_fill_gradientn(colours = RColorBrewer::brewer.pal(11, "RdBu")) +scale_size_manual(values = c(0.5, 1, 2)) +scale_colour_manual(values = color_pal(3))
给图例更改名字
qcorrplot(correlate(varechem), type = "lower", diag = FALSE) +geom_square() +geom_couple(aes(colour = pd, size = rd), data = mantel, curvature = nice_curvature()) +scale_fill_gradientn(colours = RColorBrewer::brewer.pal(11, "RdBu")) +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))
还有很多细节可以修改,我就不一一介绍了,公众号回复:网络热图数据,可以获得数据。