画热图的数据要求 (热图零基础教程)

生物信息学习的正确姿势

NGS系列文章包括NGS基础、高颜值在线绘图和分析、转录组分析 (Nature重磅综述|关于RNA-seq你想知道的全在这)、ChIP-seq分析 ChIP-seq基本分析流程、单细胞测序分析 (重磅综述:三万字长文读懂单细胞RNA测序分析的最佳实践教程)、DNA甲基化分析、重测序分析、GEO数据挖掘典型医学设计实验GEO数据分析 (step-by-step))、批次效应处理等内容。

以下文章原始来源于蚂蚁生信 ,作者蚂蚁生信

直接来源R语言统计与绘图,函数解释来自医科堂。

经常会想到用热图来展示某个基因或某些基因的表达量问题,今天用R中的pheatmap包一步步绘制热图。

如果不想写代码,在线版可以满足大部分需求,高颜值免费在线绘图工具升级版来了~~~

系统学习R见 送书《R语言数据分析和可视化》 | 这个为生信学习和生信作图打造的开源R教程真香!!!

目 录

  • 1. 绘图前准备
    • 1.1 设置工作目录
    • 1.2 安装和加载R包
    • 1.3 读取查看数据
  • 2. 绘制热图
  • 3. 自定义热图
    • 3.1 热图横向标准化
    • 3.2 图形外观调整
    • 3.3 去除横纵坐标标签
    • 3.4 修改图例
    • 3.5 设置字体
    • 3.6 调整横纵向聚类
    • 3.7 调整分组标签角度
    • 3.8 添加图形标题
    • 3.9 调整热块大小
    • 3.10 划分聚类热图区块
    • 3.11 调整热图显示数值
    • 3.12 标记热图区块
  • 4. 构建分组信息
    • 4.1 构建纵向分组信息
    • 4.2 构建横向分组信息
    • 4.3 共同组合二者
  • 5. 保存图形
  • 6. pheatmap()函数解释

1. 绘图前准备

1.1 设置工作目录

首先清除环境变量,设置工作目录,工作目录是R用来读取文件和保存结果的默认目录。

我一般是在C盘新建一个文件夹当做R的工作目录,所有的文件都复制到这里面处理。

rm(list=ls())#清除环境变量
setwd("C:/Rdata")#设置工作目录
getwd()#查看当前的工作目录
#[1]"C:/Rdata"

1.2 安装和加载R包

安装我们绘图需要用的包,如果已安装,直接加载就好了。

install.packages("pheatmap")#安装包
install.packages("ggplot2")#安装包
library(pheatmap)#加载包
library(ggplot2)#加载包

1.3 读取查看数据

演示数据不是内置数据集,如需要演示数据,请后台回复热图即可免费获取。

data<-read.table("test.FPKM.txt",#读取的数据文件名称,这里文件是放在工作目录下
header=T,#数据集第一行为变量名
row.names=1,#第一列为行名
sep="\t")#指定分隔符号
dim(data)#查看变量有多少行多少列
#[1]219
head(data)#查看数据集前六行

热图绘制怎么标注信息,热图用什么绘制

2. 绘制热图

先绘制个基本款的热图。

p<-pheatmap(data)

热图绘制怎么标注信息,热图用什么绘制

基本图形

3. 自定义热图

3.1 热图横向标准化

设置标准化方向scale,对其横向标准化。

p<-pheatmap(data,scale="row")

热图绘制怎么标注信息,热图用什么绘制

3.2 图形外观调整

设置边框为白色,去掉横向、纵向聚类。

p<-pheatmap(data,scale="row",
border="white",#设置边框为白色
cluster_cols=F,#去掉横向、纵向聚类
cluster_rows=F)

热图绘制怎么标注信息,热图用什么绘制

3.3 去除横纵坐标标签

去掉横纵坐标中的id。

p<-pheatmap(data,scale="row",
border="white",#设置边框为白色
cluster_cols=F,#去掉横向、纵向聚类
cluster_rows=F,
show_rownames=F,#去掉横、纵坐标id
show_colnames=F)

热图绘制怎么标注信息,热图用什么绘制

去掉横轴和纵轴的名称3.4 修改图例3.4.1 不显示右上角图例 p <- pheatmap(data,scale= "row", border="white", # 设置边框为白色 cluster_cols = F , # 去掉横向、纵向聚类 cluster_rows = F , show_rownames = F , #去掉横、纵坐标id show_colnames = F , legend = F ) # 去掉图例

热图绘制怎么标注信息,热图用什么绘制

将右上角的图例去掉3.4.2 设置图例范围 p <- pheatmap(data,scale= "row", border="white", # 设置边框为白色 cluster_cols = F , # 去掉横向、纵向聚类 cluster_rows = F , show_rownames = F , #去掉横、纵坐标id show_colnames = F , legend = T , # 添加图例 legend_breaks=c(-1,0,1)) # 设置图例范围 # 也可以设置legend_breaks=c(-2,0,2)试试

热图绘制怎么标注信息,热图用什么绘制

更改图例范围

3.5 设置字体

3.5.1 设置图形字体大小

设置图中字的大小,使用fondsize参数来设置。

p<-pheatmap(data,scale="row",
border="white",#设置边框为白色
cluster_cols=F,#去掉横向、纵向聚类
cluster_rows=F,
show_rownames=T,#显示横、纵坐标id
show_colnames=T,
legend=F,#去掉图例
fontsize=8)#设置字体大小
#也可以设置其他大小试试。

热图绘制怎么标注信息,热图用什么绘制

设置字的大小

3.5.2 分别指定横纵字体大小

分别指定横向和纵向字体大小,使用fontsize_row和fontsize_col参数设置。

p<-pheatmap(data,scale="row",
border="white",#设置边框为白色
cluster_cols=F,#去掉横向、纵向聚类
cluster_rows=F,
show_rownames=T,#显示横、纵坐标id
show_colnames=T,
legend=T,#显示图例
fontsize_row=12,#分别设置横向和纵向字体大小
fontsize_col=16)

热图绘制怎么标注信息,热图用什么绘制

改变横向和纵向字体的大小

3.6 调整横纵向聚类

3.6.1 调整横纵向聚类树高

分别设置横向纵向的树高,使用treeheight_col和treeheight_row参数设置。

p<-pheatmap(data,scale="row",
border="white",#设置边框为白色
cluster_cols=T,#显示横向、纵向聚类
cluster_rows=T,
treeheight_col=50,#分别设置横、纵向聚类树高
treeheight_row=45)

热图绘制怎么标注信息,热图用什么绘制

设置横向和纵向聚类热图的树形高度

3.6.2 调整聚类距离类型

设置聚类的距离类型,使用clustering_distance_rows参数指定,分为如下几类:correlation,euclidean,maximum,manhattan,canberra,binary,minkowski。

p<-pheatmap(data,scale="row",
border="white",#设置边框为白色
cluster_cols=T,#显示横向、纵向聚类
cluster_rows=T,
clustering_distance_rows="correlation",#设置聚类的距离类型
treeheight_col=50,#分别设置横、纵向聚类树高
treeheight_row=45)

热图绘制怎么标注信息,热图用什么绘制

聚类的距离类型

3.6.3 调整聚类方法

调整聚类的方法,使用clustering_method参数指定,可选有'ward', 'ward.D', 'ward.D2', 'single', 'complete', 'average', 'mcquitty', 'median' or 'centroid'.

p<-pheatmap(data,scale="row",
border="white",#设置边框为白色
cluster_cols=T,#显示横向、纵向聚类
cluster_rows=T,
clustering_distance_rows="euclidean",#设置聚类的距离类型
clustering_method="single",#设置聚类方法
treeheight_col=50,#分别设置横、纵向聚类树高
treeheight_row=45)

热图绘制怎么标注信息,热图用什么绘制

调整聚类的方法

3.7 调整分组标签角度

设置分组标签的角度,可以使用参数angle_col指定,可选有270、0、45、90、315等。

p<-pheatmap(data,scale="row",
angle_col=45,#设置显示角度
clustering_distance_rows="minkowski",
clustering_method="complete",
border="white",
cluster_cols=T,treeheight_col=20,
cluster_rows=T,treeheight_row=20)

热图绘制怎么标注信息,热图用什么绘制

分组是否斜体,旋转多少度

3.8 添加图形标题

给图形增加标题,可以使用main参数指定。

p<-pheatmap(data,scale="row",border="white",
main="Gene1",#设置图形标题
angle_col=0,
clustering_distance_rows="minkowski",
clustering_method="complete",
cluster_cols=T,treeheight_col=20,
cluster_rows=T,treeheight_row=20)

热图绘制怎么标注信息,热图用什么绘制

图片添加主题

3.9 调整热块大小

分别调整热图方块宽度和高度,可以使用cellwidth和cellheight参数指定。

p<-pheatmap(data,scale="row",border="white",
cellwidth=40,cellheight=20,#设置热图方块宽度和高度
main="Gene1",angle_col=0,
clustering_distance_rows="minkowski",
clustering_method="complete",
cluster_cols=T,treeheight_col=20,
cluster_rows=T,treeheight_row=20)

热图绘制怎么标注信息,热图用什么绘制

调整热图的宽度和高度

3.10 划分聚类热图区块

根据热图聚类对其进行区块儿划分,可以使用cutree_cols和cutree_rows参数指定

p<-pheatmap(data,scale="row",
cutree_cols=6,cutree_rows=5,#列划为6块,行为5块
main="Gene1",angle_col=0,
clustering_distance_rows="minkowski",
clustering_method="complete",border="white",
cluster_cols=T,treeheight_col=20,
cluster_rows=T,treeheight_row=20)
注:此处我去掉了热图块儿的大小;cellwidth =8,cellheight=6

热图绘制怎么标注信息,热图用什么绘制

对聚类热图进化划分

在上图基础上增加边缘线。

p<-pheatmap(data,scale="row",border="#8B0A50",
cutree_cols=6,cutree_rows=5,
main="Gene1",angle_col=0,
clustering_distance_rows="minkowski",
clustering_method="complete",
cluster_cols=T,treeheight_col=20,
cluster_rows=T,treeheight_row=20)

热图绘制怎么标注信息,热图用什么绘制

给热图块儿边缘添加颜色

3.11 调整热图显示数值

热图上是否展示数值,大小和颜色,大小以及数值展示类型,可以使用display_numbers、fontsize_number、number_color、number_format等参数设置。

3.11.1 热图上显示数值

使用display_numbers参数指定是否显示数值。

p<-pheatmap(data,scale="row",border="#8B0A50",
display_numbers=T,#热图上显示数值
cutree_cols=3,cutree_rows=4,
main="Gene1",angle_col=0,
clustering_distance_rows="minkowski",
clustering_method="complete",
cluster_cols=T,treeheight_col=20,
cluster_rows=T,treeheight_row=20)

热图绘制怎么标注信息,热图用什么绘制

添加fpkm至热图方块儿内

3.11.2 设置显示数值的大小

使用fontsize_number参数指定数值的显示大小。

p<-pheatmap(data,scale="row",border="#8B0A50",
fontsize_number=10,display_numbers=T,
cutree_cols=3,cutree_rows=4,
main="Gene1",angle_col=0,
clustering_distance_rows="minkowski",
clustering_method="complete",
cluster_cols=T,treeheight_col=20,
cluster_rows=T,treeheight_row=20)

热图绘制怎么标注信息,热图用什么绘制

添加数值大小(放大缩小)

3.11.3 设置数值的颜色

使用number_color参数指定数值的颜色。

p<-pheatmap(data,scale="row",border="#8B0A50",
number_color="red",
fontsize_number=10,display_numbers=T,
cutree_cols=3,cutree_rows=4,
main="Gene1",angle_col=0,
clustering_distance_rows="minkowski",
clustering_method="complete",
cluster_cols=T,treeheight_col=20,
cluster_rows=T,treeheight_row=20)

热图绘制怎么标注信息,热图用什么绘制

设置值的颜色

3.11.4 设置数值显示类型

使用number_format参数指定数值显示类型,下图显示为科学计数法。

p<-pheatmap(data,scale="row",border="#8B0A50",number_color="red",
number_format="%.2e",
fontsize_number=10,display_numbers=T,
cutree_cols=3,cutree_rows=4,
main="Gene1",angle_col=0,
clustering_distance_rows="minkowski",
clustering_method="complete",
cluster_cols=T,treeheight_col=20,
cluster_rows=T,treeheight_row=20)

热图绘制怎么标注信息,热图用什么绘制

设置值的类型

3.12 标记热图区块

对热图方块儿进行标记;display_numbers,如果该值大于1,则为+,否则为-。

p<-pheatmap(data,scale="row",
number_color="red",number_format="%.2e",
border="#8B0A50",
fontsize_number=16,
display_numbers=matrix(ifelse(data>1,"+","-"),nrow(data)),
cutree_cols=3,cutree_rows=4,
main="Gene1",angle_col=0,
clustering_distance_rows="minkowski",
clustering_method="complete",
cluster_cols=T,treeheight_col=20,
cluster_rows=T,treeheight_row=20)
#也可以设置display_numbers=matrix(ifelse(data>2,"++","-"),nrow(data))试试

热图绘制怎么标注信息,热图用什么绘制

为热图方块儿内容添加标记

4. 构建分组信息

构建纵向和横向分组信息(有3个处理,分别是:盐、干旱和热应激);以及时间:0-3day,对3类基因21个基因进行分组,分别是:"WRKY", "AP2", "YABBY"。

4.1 构建纵向分组信息

annotation_col=data.frame(Deal_with=factor(rep(c("Salt","Drought","Heat"),3)),
Day=factor(rep(c("Day1","Day2","Day3"),3)))
rownames(annotation_col)
#[1]"1""2""3""4""5""6""7""8""9"
colnames(data)
#[1]"Q1""Q2""Q3""F1""F2""F3""T1""T2""T3"
rownames(annotation_col)<-colnames(data)
head(annotation_col)
#Deal_withDay
#Q1SaltDay1
#Q2DroughtDay2
#Q3HeatDay3
#F1SaltDay1
#F2DroughtDay2
#F3HeatDay3

pheatmap(data,annotation_col=annotation_col)

热图绘制怎么标注信息,热图用什么绘制

p <- pheatmap(data, scale= "row", annotation_col = annotation_col, number_color="red",number_format="%.2e", border="#8B0A50",fontsize_number = 8, display_numbers = matrix(ifelse(data > 2, "++", "-"), nrow(data)), cutree_cols = 3,cutree_rows =4, main="Gene1",angle_col = 0, clustering_distance_rows = "minkowski", clustering_method="complete", cluster_cols = T ,treeheight_col = 20, cluster_rows = T ,treeheight_row = 20)

热图绘制怎么标注信息,热图用什么绘制

4.2 构建横向分组信息 annotation_row = data.frame(GeneClass = factor(rep(c( "WRKY", "AP2", "YABBY"),7)))rownames(annotation_row) <- rownames(data)head(annotation_row) # GeneClass # Gene1 WRKY # Gene2 AP2 # Gene3 YABBY # Gene4 WRKY # Gene5 AP2 # Gene6 YABBY pheatmap(data, annotation_row =annotation_row)

热图绘制怎么标注信息,热图用什么绘制

p <- pheatmap(data, scale= "row", number_color="red", annotation_row =annotation_row, number_format="%.2e", border="#8B0A50", fontsize_number = 16, display_numbers = matrix(ifelse(data > 2, "++", "-"), nrow(data)), cutree_cols = 3,cutree_rows =4, main="Gene1",angle_col = 0, clustering_distance_rows = "minkowski", clustering_method="complete", cluster_cols = T ,treeheight_col = 20, cluster_rows = T ,treeheight_row = 20)

热图绘制怎么标注信息,热图用什么绘制

4.3 共同组合二者 p <- pheatmap(data, annotation_col = annotation_col, annotation_row = annotation_row)

热图绘制怎么标注信息,热图用什么绘制

p <- pheatmap(data,scale= "row", number_color="red", annotation_col = annotation_col, annotation_row = annotation_row, number_format="%.2e",border="#8B0A50", fontsize_number = 15, display_numbers = matrix(ifelse(data > 2, "++", "-"),nrow(data)), cutree_cols = 3,cutree_rows =4, main="Gene1",angle_col = 0, clustering_distance_rows = "minkowski", clustering_method="complete", cluster_cols = T ,treeheight_col = 20, cluster_rows = T ,treeheight_row = 20)

热图绘制怎么标注信息,热图用什么绘制

5. 保存图形

可以保存为pdf/jpeg/png格式,建议保存为pdf/jpeg,因为二者清晰度高。

p<-pheatmap(data,
annotation_col=annotation_col,
annotation_row=annotation_row,
filename="基因家族热图.pdf",
width=10,height=8)

热图绘制怎么标注信息,热图用什么绘制

p <- pheatmap(data, annotation_col = annotation_col, annotation_row = annotation_row, filename = "基因家族热图.jpeg", width = 10,height = 8)

热图绘制怎么标注信息,热图用什么绘制

p <- pheatmap(data, annotation_col = annotation_col, annotation_row = annotation_row, filename = "基因家族热图.png", width = 10,height = 8)

热图绘制怎么标注信息,热图用什么绘制

6. pheatmap()函数

pheatmap(mat, color = colorRampPalette(rev(brewer.pal(n = 7, name =
                                                        "RdYlBu")))(100), kmeans_k = NA, breaks = NA, border_color = "grey60",
         cellwidth = NA, cellheight = NA, scale = "none", cluster_rows = TRUE,
         cluster_cols = TRUE, clustering_distance_rows = "euclidean",
         clustering_distance_cols = "euclidean", clustering_method = "complete",
         clustering_callback = identity2, cutree_rows = NA, cutree_cols = NA,
         treeheight_row = ifelse((class(cluster_rows) == "hclust") || cluster_rows,
                                 50, 0), treeheight_col = ifelse((class(cluster_cols) == "hclust") ||
                                                                   cluster_cols, 50, 0), legend = TRUE, legend_breaks = NA,
         legend_labels = NA, annotation_row = NA, annotation_col = NA,
         annotation = NA, annotation_colors = NA, annotation_legend = TRUE,
         annotation_names_row = TRUE, annotation_names_col = TRUE,
         drop_levels = TRUE, show_rownames = T, show_colnames = T, main = NA,
         fontsize = 10, fontsize_row = fontsize, fontsize_col = fontsize,
         angle_col = c("270", "0", "45", "90", "315"), display_numbers = F,
         number_format = "%.2f", number_color = "grey30", fontsize_number = 0.8
         * fontsize, gaps_row = NULL, gaps_col = NULL, labels_row = NULL,
         labels_col = NULL, filename = NA, width = NA, height = NA,
         silent = FALSE, na_col = "#DDDDDD", ...)

## 函数解释
mat # 需要绘制热图的数字矩阵。
color # 表示颜色,赋值渐变颜色调色板colorRampPalette属性,选择"蓝,白,红"渐变,分为100个等级
# 例 color =  colorRampPalette(c("navy", "white", "red"))(100)
kmeans_k # 绘制热图的行聚类数,如果是NA,那么行不会聚类。
breaks  # 设置mat数值范围的数字序列
border_color # 表示热图上单元格边框的颜色,如果不绘制边框,则使用NA
cellwidth # 表示每个单元格的宽度,若选择NA则表示适应窗口
cellheight # 表示每个单元格的高度,若选择NA则表示适应窗口
scale # 表示值均一化的方向,或者按照行或列,或者没有,值可以是"row",  “column” 或者"none"
cluster_rows # 表示进行行的聚类,值可以是FALSE或TRUE
cluster_cols # 表示进行列的聚类,值可以是FALSE或TRUE
clustering_distance_rows # 表示行距离度量的方法
clustering_distance_cols # 表示列距离度量的方法
clustering_method # 表示聚类方法,值可以是hclust的任何一种,
# 如"ward.D",“single”,  “complete”, “average”, “mcquitty”, “median”, “centroid”, “ward.D2”
clustering_callback # 回调函数来修改聚类
cutree_rows # 基于层次聚类(使用cutree)划分行的簇数(如果未聚集行,则忽略参数)
cutree_cols  # 基于层次聚类(使用cutree)划分列的簇数(如果未聚集行,则忽略参数)
treeheight_row # 行的树的高度,
treeheight_col # 列的树的高度
legend # TRUE或者FALSE,表示是否显示图例
legend_breaks # 设置图例的断点,如legend_breaks =  -1:4
legend_labels # legend_breaks对应的标签例:legend_breaks = -1:4, legend_labels = c(“0”,“1e-4”, “1e-3”, “1e-2”, “1e-1”, “1”)
annotation_row # 行的分组信息,需要使用相应的行名称来匹配数据和注释中的行,注意之后颜色设置会考虑离散值还是连续值,格式要求为数据框
annotation_col # 列的分组信息,需要使用相应的列名称来匹配数据和注释中的列,格式要求为数据框
annotation_colors  # 用于手动指定annotation_row和annotation_col  track颜色的列表。
annotation_legend # 是否显示图例的名称。
annotation_names_row # 是否显示行注释的名称。
annotation_names_col # 是否显示列注释的名称。
show_rownames # 是否显示行名
show_colnames # 是否显示列名
main  # 图的名字
fontsize # 图的字体大小
fontsize_row # 行名的字体大小,默认与图的字体大小相同
fontsize_col # 列名的字体大小,默认与图的字体大小相同
angle_col # 列标签的角度,可选择 (0, 45, 90, 270 and 315)
display_numbers # 表示是否将数值显示在热图的格子中,如果这是一个矩阵(与原始矩阵具有相同的尺寸),则显示矩阵的内容而不是原始值。
number_format # 设置显示数值的格式,较常用的有"%.2f"(保留小数点后两位),"%.1e"(科学计数法显示,保留小数点后一位)
number_color # 设置显示内容的颜色
fontsize_number # 设置显示内容的字体大小
labels_row  # 代替行名的自定义标签 
labels_col # 代替列名的自定义标签
filename # 图片保存位置以及文件名
width # 手动设置输出文件的宽度(单位:英寸)
height # 手动设置输出文件的高度(单位:英寸)
silent # 不绘制热图
na_col # 缺失值的颜色

本文完。

如果 觉得不错,记得分享、点赞、点在看 哦!

本文转载自 蚂蚁生信,函数解释复制自医科堂