生物信息学习的正确姿势
NGS系列文章包括、、转录组分析 ()、ChIP-seq分析 ()、单细胞测序分析 ()、DNA甲基化分析、重测序分析、GEO数据挖掘()、等内容。
以下文章原始来源于蚂蚁生信 ,作者蚂蚁生信
直接来源R语言统计与绘图,函数解释来自医科堂。
经常会想到用热图来展示某个基因或某些基因的表达量问题,今天用R中的pheatmap包一步步绘制热图。
如果不想写代码,在线版可以满足大部分需求,
系统学习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()函数解释
首先清除环境变量,设置工作目录,工作目录是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] 21 9 head(data) # 查看数据集前六行先绘制个基本款的热图。
p <- pheatmap(data)设置标准化方向scale,对其横向标准化。
p <- pheatmap(data, scale="row")设置边框为白色,去掉横向、纵向聚类。
p <- pheatmap(data, scale="row", border="white", # 设置边框为白色 cluster_cols = F, # 去掉横向、纵向聚类 cluster_rows = F)去掉横纵坐标中的id。
p <- pheatmap(data,scale="row", border="white", # 设置边框为白色 cluster_cols = F, # 去掉横向、纵向聚类 cluster_rows = F, show_rownames = F, #去掉横、纵坐标id show_colnames = F)设置图中字的大小,使用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) # 设置字体大小 # 也可以设置其他大小试试。分别指定横向和纵向字体大小,使用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)分别设置横向纵向的树高,使用treeheight_col和treeheight_row参数设置。
p <- pheatmap(data,scale="row", border="white", # 设置边框为白色 cluster_cols = T, # 显示横向、纵向聚类 cluster_rows = T, treeheight_col = 50, # 分别设置横、纵向聚类树高 treeheight_row = 45)设置聚类的距离类型,使用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)调整聚类的方法,使用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)设置分组标签的角度,可以使用参数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)给图形增加标题,可以使用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)分别调整热图方块宽度和高度,可以使用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)根据热图聚类对其进行区块儿划分,可以使用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)热图上是否展示数值,大小和颜色,大小以及数值展示类型,可以使用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)使用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)使用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)使用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)对热图方块儿进行标记;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))试试构建纵向和横向分组信息(有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_with Day # Q1 Salt Day1 # Q2 Drought Day2 # Q3 Heat Day3 # F1 Salt Day1 # F2 Drought Day2 # F3 Heat Day3 pheatmap(data, annotation_col = annotation_col)可以保存为pdf/jpeg/png格式,建议保存为pdf/jpeg,因为二者清晰度高。
p <- pheatmap(data, annotation_col = annotation_col, annotation_row = annotation_row, filename = "基因家族热图.pdf", width = 10, height = 8)本文完。
如果觉得不错,记得分享、点赞、点在看哦!
本文转载自蚂蚁生信,函数解释复制自医科堂。
往期精品(点击图片直达文字对应教程)后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集