用heatmap画热图
假装是前言
学了很久的R,一直也没啥进展,之前一直觉得R不是很容易的东西吗,复制粘贴代码就好了。。emmm,太年轻太年轻。。
我用R的日常就是画热图,各种各样的热图。所以网上能搜到的画热图的教程我基本都看了一遍,heatmap3啊,ggplot2啊都试过,最后还是觉得pheatmap用起来最容易上手。虽然ggplot2很强大,但是杀鸡就杀鸡,拿牛刀干嘛?虽然pheatmap也有很多毛病,比如最不能忍的是没法把column的标签给斜45°显示,太不人性化了!
主要内容整合自各种网上的教程及一个价值一毛钱的腾讯课堂课程,感兴趣的可以花一毛钱听一听,讲真,还是值一毛钱的😂
安装
#设置国内镜像
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
options(BioC_mirror="https://mirrors.tuna.tsinghua.edu.cn/bioconductor")
install.packages('devtools')
library(devtools)
install_github("raivokolde/pheatmap")
直接用install.package("pheatmap")
也能下载到一个pheatmap的包,但是用起来感觉和上面这种方式是不一样的。也许是不同的版本, 用以上方式下载的版本更新一些。
绘图前准备
#清空环境变量
rm(list=ls())
#获取当前工作目录
getwd()
#设置工作目录
setwd('C:/Users/hans/Desktop/')
R四丢丢是默认保存之前运行过的环境变量的,所以要先清除一下。接下来看看当前的工作目录在哪,最后把工作目录调到桌面上。因为很多时候老板给个excel放在其他位置可能不太容易找,所以统一放在桌面,等画完了热图再统一归档到相关的文件夹中去。
加载包加载数据
#加载包
library(RColorBrewer)#设置颜色用的
library(pheatmap)
#设置配色方案
cc = colorRampPalette(rev(brewer.pal(n=7, name="RdYlBu"))) #Rd=red Yl=yellow Bu=blue
#读入文件,如果确实过多,会无法聚类,最好保证没有缺失,或将缺失替换为0
TPS<-read.csv(file = "TPS_expr.csv",row.names = 1,header = T,check.names = F,na.string=0)
#如果矩阵内容是fpkm表达量,一般取log10(fpkm+1)绘图
TPS=log2(TPS+1)
RColorBrewer是一个很常用的调颜色用的包,具体用法就不赘述了可以看别的教程。常用的就是经典的红黄蓝配色,也有深红和海军蓝的配色的(color = colorRampPalette(c("navy", "white", "firebrick3"))(100)
),具体怎么选择就看老板和个人喜好,反正保证一篇文章里热图的配色一致就好了。
把拿到的excel表另存为csv格式,用read.csv
读取到R里。这里画的是一个TPS基因家族的热图,于是就把矩阵的名词用TPS命名了。这里有几个要设置的地方:
row.names=1
设置的是第一列为数据的名称,基本上是用基因的ID命名的。
header=T
是指第一行为数据的列名。
check.names=F
这个特别重要,当你的列名是以数字开头的时候,比如有的时候数据是时间相关的,6:00, 8:00, 10:00等,会在最前面显示一个x
并且冒号会给你替换成点(6:00
→ x6.00
)设置了检查名称为False之后就不会有这个问题了。这个点是在生信技能树的vip群里看人家讨论问题的时候学到的(感谢大佬们!🙇)
na.string=0
是在一毛钱的课程里学到的,非常好用的一个参数。设置了0为缺失值之后,在后面画图的时候可以增加一个缺失值的显示效果,感觉还挺不错的。
接下来就是玄学取log了。一毛钱的课程里提到:
如果矩阵内容是fpkm表达量,一般取log10(fpkm+1)绘图
但是只是说一般。毕竟所有的工具所有的图都是为文章服务的,怎样显示效果好,能契合文章的讲述方向,就取什么样的值。我们一般取log2(fpkm+1)比较多。
绘图
#绘图
heatmap=pheatmap(TPS,color = cc(100),
main="TPS",
fontsize = 15,
scale="row",
border_color = NA,
na_col = "grey"
cluster_rows = T,cluster_cols = T,
show_rownames = T,show_colnames = T,
treeheight_row = 30,treeheight_col = 30,
cellheight = 15,cellwidth = 30,
cutree_row=2,cutree_col=2,
display_numbers = F,legend = T
filename = "TPS.pdf"
)
参数解释:
第一个参数是需要用pheatmap画图的数据
color
: 设置颜色。如果想画得更精细一些,可以取cc(1000)
main
: 标题,会显示在最上面
fontsize
: row的字体大小
scale
: 是否归一化为正态分布,可选row
,column
,none
。一般对row进行归一化的情况比较多,column较少。
border_color
: 是否显示边框及边框的颜色,NA
不显示, red
显示红色。支持简单的颜色单词
na_col
: 设置缺失值的颜色,支持简单颜色单词,一般设置为灰色就满好识别的。
cluster_rows
& cluster_cols
: 设置是否对行进行聚类,这个就见仁见智,看你的实际需求了。当缺失值较多的时候是无法进行聚类的。一个解决办法是读取数据的时候不设置缺失值。
show_rownames
& show_colnames
: 是否显示行/列的名称
treeheight_row
& treeheight_col
: 当前面设置了聚类之后,两边会出现聚类的树,这个参数是设置树的高度的。
cellheight
& cellwidth
: 设置每个各自的宽度和高度。有的时候不设置这两个值画出来的树容易放飞自我😂
cutree_row
& cutree_col
: 是否根据聚类情况把树切开,可以设置切开的份数。
display_numbers
: 设置是否显示每个单元格的值。这个也是个人喜好及文章需求。
legend
: 设置是否显示旁边的bar状图例,emmmm好像还没碰到说不要那个玩意儿的情况。。
filename
: 设置输出文件的名字。可以设置的文件类型有:pdf,png,jpg,tiff,bmp
基本上一个符合老板要求的热图要调的就是这些参数了,当然还有很多奇技淫巧可以把热图做得花里胡哨的,我之前很多次想做得更好看一点都被老板拒绝了。。心累。行叭, 就这样了。有需要别的进阶热图的自己查别的教程去,乖。
晚安。
卖萌哥
2019年1月26日01点19分于西双版纳