分享

Bulk RNA-seq | 第5期. 关于热图,你所不知道的

 新用户4064dVjo 2023-11-11 发布于北京

本系列推送旨在带领生信零基础的科研人一起掌握Bulk RNA-seq数据分析,同时为其他Bulk组学和单细胞(核)转录组测序的数据分析奠定基础。

往期回顾:

第1期. 快2024年了,还有必要学习Bulk RNA-seq?
第2期. 零基础画PCA图

第3期. 基因ID转换,一键搞定

第4期. 差异分析三巨头,该了解一下了

今天我们来学习Bulk RNA-seq数据常用的一种数据可视化形式:热图Heatmap主要分享以下3个方面:

一、热图的常见呈现形式?
二、使用热图的常见目的?
三、如何基于R生成热图?

一、热图的常见呈现形式?

虽然“热图”只有两个字,但是基于Bulk RNA-seq的热图的具体呈现形式是五花八门的,具体由哪些形式呢?为了回答这个问题,我在心血管领域顶级期刊Circulation上进行了检索:

然后手动参看上述199篇文章的内容,然后,汇总出下面一张图:

二、使用热图的常见目的?

有了上述的一张图,那其实就可以推测出热图常见的几个目的了:

1. 呈现组间差异基因的数量(上调和下调)

2. 呈现组间具体的差异基因

3. 呈现组间具体的差异基因,并同时呈现这些基因对应的fold changeadjusted p value

4. 呈现组间具体的差异基因,并同时呈现这些差异基因富集的通路

5. 呈现一个具体通路中的基因在组间各个样本的表达情况

6. 呈现样本间的相关性

三、如何基于R生成热图?

   下面将以“呈现组间具体的差异基因”为目的,展示基于R的实战过程。(想获得练习数据,可在公众号输入:Bulk RNA-seq练习数据3

1. 安装并加载R(如果没有安装过相关R包,需要先安装,再加载)

library(tidyverse)
library(pheatmap)
library(RColorBrewer)

2. 加载数据(2个数据,分别是样本-基因矩阵数据、差异分析结果)

##2.1 样本-基因矩阵
data <- read.csv("./1.数据/Bulk RNA-seq练习数据3_data_with_gene_symbol.csv",row.names = 1)

data(样本-基因矩阵)

##2.2 差异分析结果(我们上次的分享内容里有计算过程)
DEGs <- read.csv("./1.数据/Bulk RNA-seq练习数据4_DEGs_with_DESeq2.csv")

DEGs(差异分析结果 [我们上次的分享内容里有计算过程]

3. 明确data和meta

##3.1 data (在原来的 样本-基因矩阵的基础上,先进行log,再筛选出样本-差异基因矩阵)
data_log <- log(data+1)
DEGs_selected <- DEGs %>%
  filter(padj < 0.05,
   log2FoldChange>log2(3) | log2FoldChange<log2(1/3))  #可以人为设置阈值

data_log_selected <- data_log[DEGs_selected$gene,]

Log转化后的样本-差异基因矩阵
##3.2 meta(为后续可视化的图注为准备)
meta <- data.frame(sample = colnames(data),
 group = sapply(str_split(colnames(data), "_"), function(x) x[1]))

meta_select_gene <- meta %>%
  tibble::remove_rownames() %>%
  column_to_rownames(., var = 'sample') %>%
  dplyr::mutate(group = fct_relevel(group, c('NF','ICM'))) %>%
  dplyr::arrange(group)

meta_select_gene

4. 热图(基于pheatmap函数)

anno_color <- list(group = c('NF' = '#66c2a5',
  'ICM' = '#fc8d62'))

plot <- pheatmap(data_log_selected, cluster_cols = F, cluster_rows = T,
   show_colnames = T, show_rownames = T, scale = 'row'
   annotation_col = meta_select_gene, 
   annotation_colors = anno_color,
   color = rev(colorRampPalette(brewer.pal(11,'RdBu'))(1000)),
   fontsize_row = 5) 

想跟更多的生信人一起交流,请进入下方“R语言与组学交流群”。

期待已久~|医学基础科研互助交流群来啦!

(欢迎大家入群交流~

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多