以下文章原始来源于蚂蚁生信 ,作者蚂蚁生信
直接来源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()函数解释
首先清除环境变量,设置工作目录,工作目录是R用来读取文件和保存结果的默认目录。
我一般是在C盘新建一个文件夹当做R的工作目录,所有的文件都复制到这里面处理。
rm(list=ls()) # 清除环境变量 setwd("C:/Rdata") # 设置工作目录 getwd() # 查看当前的工作目录 # [1] "C:/Rdata"安装我们绘图需要用的包,如果已安装,直接加载就好了。
install.packages("pheatmap") # 安装包 install.packages("ggplot2") # 安装包 library(pheatmap) # 加载包 library(ggplot2) # 加载包演示数据不是内置数据集,如需要演示数据,请后台回复热图即可免费获取。
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等参数设置。
使用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至热图方块儿内使用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"。
可以保存为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)本文完。
10000+:菌群分析 宝宝与猫狗 梅毒狂想曲 提DNA发Nature Cell专刊 肠道指挥大脑
系列教程:微生物组入门 Biostar 微生物组 宏基因组
专业技能:学术图表 高分文章 生信宝典 不可或缺的人
一文读懂:宏基因组 寄生虫益处 进化树
必备技能:提问 搜索 Endnote
文献阅读 热心肠 SemanticScholar Geenmedical
扩增子分析:图表解读 分析流程 统计绘图
16S功能预测 PICRUSt FAPROTAX Bugbase Tax4Fun
在线工具:16S预测培养基 生信绘图
科研经验:云笔记 云协作 公众号
编程模板: Shell R Perl
生物科普: 肠道细菌 人体上的生命 生命大跃进 细胞暗战 人体奥秘
为鼓励读者交流、快速解决科研困难,我们建立了“宏基因组”专业讨论群,目前己有国内外5000+ 一线科研人员加入。参与讨论,获得专业解答,欢迎分享此文至朋友圈,并扫码加主编好友带你入群,务必备注“姓名-单位-研究方向-职称/年级”。PI请明示身份,另有海内外微生物相关PI群供大佬合作交流。技术问题寻求帮助,首先阅读《如何优雅的提问》学习解决问题思路,仍未解决群内讨论,问题不私聊,帮助同行。
学习16S扩增子、宏基因组科研思路和分析实战,关注“宏基因组”
点击阅读原文,跳转最新文章目录阅读