R语言绘制热图

什么是热图?

如图,就是一副组学研究中热图的常用绘制模式,每个小方格表示每个基因在不同样本中的定量值,其颜色表示该基因表达量大小,红色为高表达,蓝色为低表达。

1,行名称,一般为样本名称

2,列名称,一般为基因名称

3,图例信息,左侧图例是热图表达量的颜色图例说明,右侧图例为分组信息的图例说明。绘制热图一般会做ZScore归一化处理,可以看到图例数据成0左右对称分布,一般都是做了Zscore归一化的。

4,列聚类,如果不聚类,排序将保持文件数据的默认方式。从样本角度讲,聚类可以观察到你采集的不同组别样本是否被分类到一起了。因为,理论上如果样本来自于同一个组,其特征应该是相似的,而如果在实际操作中,某一个应该属于该组的样本被聚类到别的组了,那就说明这个样本本身的变异度很高,或者说在之前的样本采集或者测序过程中出了什么问题。

5,行聚类,如果不聚类,排序将保持文件数据的默认方式。从基因表达角度讲,聚类可以观察到哪些基因群体具有比较一致的表达变化,因为基因的上下游关系一般是连锁反应的,也就是说一个基因的表达增加可能能够带动一系列的基因的表达增加。

6,列分组信息。

7,行分组信息。

绘图前的数据准备

热图数据

数据来源一般是搜库结果定量表。包含2个维度的数据,一般情况下,每一行是一个基因,每一列是一个样本。

demo数据可以在https://www.r2omics.cn/res/demodata/heatmap/data.heatmap.txt下载。

样本分组数据(可选)

行名的名称和个数要和之前的heatmap数据保持一致,列名为分组名称,可以包含不止一个分组。

demo数据可以在https://www.r2omics.cn/res/demodata/heatmap/sample.class.txt下载。

基因分组数据(可选)

行名的名称和个数要和之前的heatmap数据保持一致,列名为分组名称,可以包含不止一个分组。

demo数据可以在https://www.r2omics.cn/res/demodata/heatmap/gene.class.txt下载。

R语言怎么画热图

# 代码来源:https://www.r2omics.cn/
library(pheatmap) # 加载pheatmap这个R包

# 1,读取热图数据文件
df = read.delim("https://www.r2omics.cn/res/demodata/heatmap/data.heatmap.txt", #文件名称 注意文件路径,格式
                header = T, # 是否有标题
                sep = "\t", # 分隔符是Tab键
                row.names = 1, # 指定第一列是行名
                fill=T) # 是否自动填充,一般选择是
# (可选)读取分组数据文件
dfSample = read.delim("https://www.r2omics.cn/res/demodata/heatmap/sample.class.txt",header = T,row.names = 1,fill = T,sep = "\t")
dfGene = read.delim("https://www.r2omics.cn/res/demodata/heatmap/gene.class.txt",header = T,row.names = 1,fill = T,sep = "\t")

# 2,绘图
pheatmap(df, 
         annotation_row=dfGene,   # (可选)指定行分组文件
         annotation_col=dfSample, # (可选)指定列分组文件
         show_colnames = TRUE,    # 是否显示列名
         show_rownames=TRUE,      # 是否显示行名
         fontsize=5,              # 字体大小
         color = colorRampPalette(c('#0000ff','#ffffff','#ff0000'))(50), # 指定热图的颜色
         annotation_legend=TRUE,  # 是否显示图例
         border_color=NA,         # 边框颜色 NA表示没有
         scale="row",             # 指定归一化的方式。"row"按行归一化,"column"按列归一化,"none"不处理
         cluster_rows = TRUE,     # 是否对行聚类
         cluster_cols = TRUE      # 是否对列聚类
)

附录

常见报错

Error in hclust(d, method = method) : 
  NA/NaN/Inf in foreign function call (arg 10)

主要有2种原因

  1. 缺失值过多,导致聚类失败
  2. 由于数据中存在标准差为0的行或列。或者是全空的行或列。pheatmap里面有个参数scale,用的Z-score归一化,标准差会作为分母,当为0时会产生Inf。接着这些Inf会导致hclust聚类时报错。