基于R的linkET包qcorrplot可视化Mantel test相关性网络热图分析correlation heatmap

写在前面

需求是对瘤胃宏基因组结果鉴定到的差异菌株与表观指标、瘤胃代谢组、血清代谢组、牛奶代谢组中有差异的部分进行关联分析,效果图如下:

数据准备

逗号分隔的csv格式文件,两个表格,一个是每个样本对应的表观指标数据,另一个是每个样本对应的菌群丰度,我这里用的是genus水平

  • 需要关联的表观数据rumen.csv
  • 不同样本的菌群丰度genus.csv

R包linkET可视化

  • 装包
R 复制代码
install.pakages("linkET")
library(linkET)

如果报错R版本有问题装不上(我的4.3.1版本R出现了这个报错)请尝试:

R 复制代码
install.packages("devtools")
devtools::install_github("Hy4m/linkET", force = TRUE)
packageVersion("linkET")
  • 读取数据
R 复制代码
library(ggplot2)
rumen <- read.csv("rumen.csv",sep=",",row.name=1,stringsAsFactors = FALSE,check.names = FALSE)
genus <- read.csv("genus.csv",sep=",",row.name=1,stringsAsFactors = FALSE,check.names = FALSE)
#如果报错row.names重复错误请检查数据格式是否为csv
  • rumen.csv组内相关系数
R 复制代码
matrix_data(list(rumen = rumen)) %>% 
  as_md_tbl()
correlate(rumen) %>% 
  as_matrix_data()
correlate(rumen) %>% 
  as_md_tbl()

correlate(rumen) %>% 
  as_md_tbl() %>% 
  qcorrplot() +
  geom_square()

#如果对"%>%"功能报错,装具有此功能的包即可,比如dplyr

library(vegan)
correlate(rumen, genus, method = "spearman") %>% 
  qcorrplot() +
  geom_square() +
  geom_mark(sep = '\n',size = 3, sig_level = c(0.05, 0.01, 0.001),
            sig_thres = 0.05, color = 'white') + #添加显著性和相关性值
  scale_fill_gradientn(colours = RColorBrewer::brewer.pal(11, "RdBu"))
  • 两个表格进行关联生成相关性矩阵图,带显著性标记
R 复制代码
library(vegan)
correlate(rumen, genus, method = "spearman") %>% 
  qcorrplot() +
  geom_square() +
  geom_mark(sep = '\n',size = 3, sig_level = c(0.05, 0.01, 0.001),
            sig_thres = 0.05, color = 'white') + #添加显著性和相关性值
  scale_fill_gradientn(colours = RColorBrewer::brewer.pal(11, "RdBu"))
  • 加工可视化
R 复制代码
library(dplyr)
mantel <- mantel_test(rumen, genus,
                      spec_select = list(Milk_yeild=1,Milk_fat=2,Urea_Nitrogen=3,Butyric_acid=4,Valeric_acid=5,BUN=6,
                                         T_AOC=7,SOD=8,MDA=9,IgA=10,IgG=11))%>% 
  mutate(rd = cut(r, breaks = c(-Inf,  0.5, Inf),
                  labels = c("< 0.5", ">= 0.5")),
         pd = cut(p, breaks = c(-Inf, 0.01, 0.05, Inf),
                  labels = c("< 0.01", "0.01 - 0.05", ">= 0.05")))

qcorrplot(correlate(genus), type = "lower", diag = FALSE) +
  geom_square() +geom_mark(sep = '\n',size = 1.8, sig_level = c(0.05, 0.01, 0.001),
    sig_thres = 0.05,color="white") +
  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(color = "black"), 
                             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))
  • 不显著的灰色连接线部分也可以去掉让画面更干净。其余细节去AI加工即可。
相关推荐
呜喵王阿尔萨斯20 分钟前
C/C++ const -- 多义混乱
c语言·开发语言·c++
__log20 分钟前
幂等性设计:从“重复提交“到“稳如磐石“的系统防护
java·开发语言·spring boot
spider_xcxc21 分钟前
Helm 部署 K8s 集群完整笔记
java·开发语言·kubernetes
海清河晏11122 分钟前
Qt实战:从零构建美化登录界面
开发语言·c++·qt
一只小灿灿32 分钟前
C++ 各类特殊符号、运算符
开发语言·c++
Fu_Lin_35 分钟前
《Qt嵌入式从零基础到精通》前言与阅读指南
开发语言·qt
名字还没想好☜39 分钟前
Go 的 select 实战:超时、非阻塞收发与优雅退出的三个套路
开发语言·数据库·golang·go·并发
geovindu40 分钟前
java: Backtracking Algorithm
java·开发语言·windows·后端·算法·回溯算法
Scott9999HH9 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社10 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言