欢迎关注R语言数据分析指南
❝最近有朋友询问如何使用「pheatmap」绘制相关性热图,小编之前已经写过各种ggplot2风格的热图,但是对于pheatmap却是很少涉及,这一节就来介绍一下「pheatmap绘制相关性热图」,希望各位观众老爷能够喜欢。 ❞
加载R包
代码语言:javascript复制library(tidyverse)
library(psych)
library(pheatmap)
library(magrittr)
# devtools::install_github("thomasp85/scico")
library(scico)
导入数据
代码语言:javascript复制# 读取环境数据文件并存储到env变量中,使用tab作为分隔符,第一列作为行名,不检查列名的合法性
env <- read.delim("env.xls", header = TRUE, sep = "t", row.names = 1, check.names = FALSE)
# 读取物种数据文件并存储到genus变量中,使用tab作为分隔符,第一列作为行名,不检查列名的合法性
genus <- read.delim("genus.xls", header = TRUE, sep = "t", row.names = 1, check.names = FALSE) %>%
t() %>% as.data.frame()
相关性分析
代码语言:javascript复制# 使用pearson方法计算环境数据和物种数据之间的相关系数和p-value,并进行多重比较法的FDR校正
pp <- corr.test(env, genus, method = "pearson", adjust = "fdr")
cor <- pp$r # 获取相关系数矩阵
pvalue <- pp$p # 获取p-value矩阵
数据整合
代码语言:javascript复制# 将相关系数矩阵转换为长格式,并添加p-value和显著性符号列
df <- melt(cor) %>%
mutate(pvalue = melt(pvalue)[, 3],
p_signif = symnum(pvalue, corr = FALSE, na = FALSE,
cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1),
symbols = c("***", "**", "*", "", " "))) %>%
set_colnames(c("env", "genus", "r", "p", "p_signif"))
格式转换
代码语言:javascript复制❝由于后面我们需要使用pheatmap绘图,因此在此需要将长数据转换为宽表 ❞
#将相关系数矩阵转换为宽格式,行名为环境变量,列名为物种,值为相关系数
rvalue <- df %>%
select(1, 2, 3) %>%
pivot_wider(names_from = "genus", values_from = r) %>%
column_to_rownames(var = "env")
# 将显著性符号矩阵转换为宽格式,行名为环境变量,列名为物种,值为显著性符号
pvalue <- df %>%
select(1, 2, 5) %>%
pivot_wider(names_from = "genus", values_from = p_signif) %>%
column_to_rownames(var = "env")
定义颜色
在此使用昨天介绍的「scico」包制作一个调色板
代码语言:javascript复制mycol <- scico(100, palette = "vik")
pheatmap绘制热图
代码语言:javascript复制# 绘制热图,显示相关系数,行列聚类,无边框,显示p-value作为数字,设置数字字体大小和颜色
# 设置主标题为空格,设置单元格宽度和高度,使用自定义颜色映射
pheatmap(rvalue, scale = "none", cluster_row = TRUE, cluster_col = TRUE, border = NA,
display_numbers = pvalue, fontsize_number = 12, number_color = "white",
main = " ",
cellwidth = 21, cellheight = 20, color = mycol)