相关性分析热图:ggplot2包绘制环境因子和物种相关性热图/气泡图
创作时间:
作者:
@小白创作中心
相关性分析热图:ggplot2包绘制环境因子和物种相关性热图/气泡图
引用
CSDN
1.
https://blog.csdn.net/a852232394/article/details/131070792
本文将介绍如何使用R语言进行环境因子和物种相关性分析,并使用ggplot2包绘制热图和气泡图,对相关性分析结果进行可视化展示。
相关性热图样式灵感来源于Microbiome杂志的一篇文章:
Step1:环境因子与物种数据相关性分析
rm(list=ls())
pacman::p_load(tidyverse,reshape2,psych)
# 载入环境/物种数据
env <- read.delim('env_table.txt', sep = '\t', row.names = 1)
taxonomy <- read.delim('spe_table.txt', sep = '\t', row.names = 1)
env <- env[rownames(taxonomy), ]
# 执行相关性分析
r_result <- corr.test(taxonomy, env, method = 'spearman')
r <-
r_result$r %>%
melt() %>%
set_names(c('tax', 'Index', 'r'))
p <-
r_result$p %>%
melt() %>%
set_names(c('tax', 'Index', 'P_value')) %>%
mutate(P_value_sig = case_when(P_value > 0.05 ~ " ",
P_value <= 0.05 & P_value > 0.01 ~ "*",
P_value <= 0.01 & P_value > 0.001 ~ "**",
P_value <= 0.001 ~ "***",
TRUE ~ NA_character_))
data <- cbind(r,p) %>% select(-(4:5))
head(data)
上述代码中:我们载入了需要的R包,并读取了环境因子和物种数据。然后,我们使用psych包的corr.test函数执行了相关性分析,并将结果保存在r_result变量中。接下来,我们整理了相关性和p值的数据,并根据P值的不同范围,构建“***”并使用标记;之后使用melt函数将数据进行重塑,以便后续的可视化处理。
Step2:所有样本整体相关性的热图简单展示
# 绘图主题
theme <- theme_bw(base_size = 7) +
theme(panel.grid.major = element_blank(),
text = element_text(face='bold'),
legend.key.size = unit(5, "pt"),
panel.grid.minor = element_blank(),
axis.ticks.y = element_blank(),
axis.text.x=element_text(angle=45,vjust=1, hjust=1))
ggplot(data,aes(x=tax, y=Index))+
geom_tile(aes(fill=r), color = 'white',alpha = 0.6) +
geom_text(aes(label = P_value_sig), color = 'black', size = 2) +
ggsci::scale_fill_gsea() +
theme(legend.position="top") +
theme +
xlab('') +
ylab('')
ggsave('heatmap_corr.png',height = 2, width = 2)
在这段代码中,我们使用ggplot函数创建了一个基本的绘图对象,并使用geom_tile函数绘制了热图。通过geom_text函数,我们还添加了对应的p值显著性标记。这张热图将展示环境因子和物种之间的相关性,并通过颜色填充来表示p值的显著性。
接下来,我们定义一个函数cal,用于计算不同组内物种与环境因子之间的相关性。代码如下:
Step3:定义分组相关性计算函数
# 定义一个函数,计算不同组内物种与环境因子之间的相关性
cal <- function(group){
# 提取分组样品名称

g <- grep(group, rownames(env), value = T)
# 执行分组相关性分析
r_result <- corr.test(taxonomy[g, ], env[g, ], method = 'spearman')
# 提取r值
r <-
r_result$r %>%
melt() %>%
set_names(c('tax', 'Index', 'r'))
# 提取P值
p <-
r_result$p %>%
melt() %>%
set_names(c('tax', 'Index', 'P_value')) %>%
mutate(P_value_sig = case_when(P_value > 0.05 ~ " ",
P_value <= 0.05 & P_value > 0.01 ~ "*",
P_value <= 0.01 & P_value > 0.001 ~ "**",
P_value <= 0.001 ~ "***",
TRUE ~ NA_character_))
# 合并数据
data <- cbind(r,p) %>%
select(-(4:5)) %>%
mutate(group)
data
}
cal('A') %>% head()
cal('B') %>% head()
cal('C') %>% head()
Step4:相关性热图(“*”标记显著性)
# 数据合并
data <- rbind(cal('A'), cal('B'), cal('C'))
# 指定封面顺序
data$group <- factor(data$group, levels = c('A', 'B', 'C'), ordered=TRUE)
# 出图
ggplot(data,aes(x=Index, y=tax))+
geom_tile(aes(fill=r), color = 'white',alpha = 0.6) +
geom_text(aes(label = P_value_sig), color = 'black', size = 2) +
ggsci::scale_fill_gsea() +
theme(legend.position="top") +
theme +
facet_grid( ~ group, scales = 'free') +
labs(y = 'Taxonomy', x = 'Environment', title = 'Spearman Correlation Plot', size = '|rho|', color = 'rho')
ggsave('heatmap_corr1.png',height = 2, width = 6)
Step5:相关性热图(P值和“*”同时标记显著性)
# 数据整理
data <- rbind(cal('A'), cal('B'), cal('C')) %>%
mutate(P_value_sig2 = paste0(round(P_value, 2), ' ', P_value_sig))
theme_heatmap <-
theme_bw(base_size = 7) +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),

legend.key.size = unit(5, "pt"),
panel.border = element_blank(),
axis.ticks.x = element_blank(),
axis.ticks.y = element_blank(),
text = element_text(face='bold'),
axis.text.x = element_text(angle=45,vjust=1, hjust=1))
ggplot(data,aes(x=Index, y=tax)) +
geom_tile(aes(fill=r), alpha = 0.6) +
geom_text(aes(label = P_value_sig2), color = 'black', size = 1) +
ggsci::scale_fill_gsea() +
theme_heatmap +
coord_flip() +
facet_grid( ~ group, scale = 'free') +
labs(y = 'Taxonomy', x = 'Environment', title = 'Spearman Correlation Plot', size = '|rho|', color = 'rho')
ggsave('heatmap_corr2.png',height = 2.5, width = 6)
最后,我们可以通过绘制精美的气泡图来展示相关性分析结果:
Step6:气泡图展示相关性分析结果
ggplot(data,aes(x=Index, y=tax))+
geom_point(aes(color = r, size = abs(r))) +
geom_text(aes(label = P_value_sig2), color = 'black', size = 1) +
scale_size_area(max_size = 5) +
ggsci::scale_color_material('teal') +
theme_heatmap +
theme(legend.key.size = unit(6, "pt"),
strip.background = element_rect(fill = '#99CCCC')) +
facet_wrap( ~ group,strip.position = 'bottom') +

labs(y = 'Taxonomy', x = 'Environment', title = 'Spearman Correlation Plot', size = '|rho|', color = 'rho')
ggsave('heatmap_corr3.png',height = 2, width = 6)
本文原文来自CSDN
热门推荐
父亲的遗产有什么影响吗
不吃死虾,不吃虾头,不要生食……小龙虾的正确吃法来了→
故宫五线菩提:从植物学特征到文化价值
从《都市古仙医》看爱奇艺跑通“爽文漫”赛道
享受香醇蓝莓汁的绝佳秘诀
4090是否为最高显卡?探究显卡性能与选购要点
如何获得游戏的资源码
深耕20年,1.1类新药TP21已进入3期临床,索普兴大将推出新一代肝癌铂类药物
中药盐黄柏的功效与作用
信用报告怎么查询? 线上+线下渠道多
水母的寿命:全面解析
番泻叶的正确冲泡方法是什么
世界姓氏大数据:揭秘你我之间的联系
储蓄卡与借记卡,功能比较与选择指南
北京朝阳医院完成首例跨院区ECPR危重症患者转运救治
直系亲属房产过户交税新政策是什么
健康科普丨体检发现“肺结节”怎么办?别怕,MDT来把关!
银行账户资金解冻指南:所需材料及注意事项
情感成熟度:定义、标志与培养方法
考过了法考又怎么样?法考人的就业前景
蛋白棒食用指南:健身小助手的正确打开方式
Neo切片软件的基本概念
LED灯不亮的问题及修复方法(解决LED灯不亮的常见故障及维修技巧)
瑞舒伐他汀钙片主治什么病
貔貅手链佩戴指南:从搭配到禁忌,一次掌握所有秘诀
李宏毅、刘学义主演的《少年歌行》全部人物关系,看完这文就懂了
诺丽果是什么?告诉你诺丽果的功效与注意事项有哪些
古里雅冰川中发现超过 1700 种古病毒,它们对人体有威胁吗?
海棠花的象征意义与传说(揭秘海棠花的背后故事)
凯普润消毒: 免洗洗手液能代替流水洗手吗?