公众号链接:
热图是做分析时常用的展示方式,简单、直观、清晰。可以用来显示基因在不同样品中表达的高低、表观修饰水平的高低等。任何一个数值矩阵都可以通过合适的方式用热图展示。
本篇使用R的ggplot2包实现从原始数据读入到热图输出的过程,并在教程结束后提供一份封装好的命令行绘图工具,只需要提供矩阵,即可一键绘图。
上一篇讲述了Rstudio的使用作为R写作和编译环境的入门,后面的命令都可以拷贝到Rstudio中运行,或写成一个R脚本,使用Rscriptheatmap.r运行。我们还提供了Bash的封装,在不修改R脚本的情况下,改变参数绘制出不同的图形。
绘图首先需要数据。通过生成一堆的向量,转换为矩阵,得到想要的数据。
注意:运算符的优先级。
Vector转为矩阵(matrix),再转为数据框()。
虽然方法比较繁琐,但一个数值矩阵已经获得了。
还有另外2种获取数值矩阵的方式。
可以看到列名字中以数字开头的列都加了
X
。一般要尽量避免行或列名字以
数字开头
,会给后续分析带去一些困难;另外名字中出现的非字母、数字、下划线、点的字符都会被转为
点
,也需要注意,尽量只用字母、下划线和数字。
与上一步类似,只是改为文件名,不再赘述。
数据读入后,还需要一步格式转换。在使用ggplot2作图时,有一种长表格模式是最为常用的,尤其是数据不规则时,更应该使用(这点,我们在讲解箱线图时再说)。
数据转换后就可以画图了,分解命令如下:
热图出来了,但有点不对劲,横轴重叠一起了。一个办法是调整图像的宽度,另一个是旋转横轴标记。
设置想要的颜色。
调整legend的位置。
调整背景和背景格线以及X轴、Y轴的标题。
合并以上命令,就得到了下面这个看似复杂的绘图命令。
图形出来了,就得考虑存储了,
至此,完成了简单的heatmap的绘图。但实际绘制时,经常会碰到由于数值变化很大,导致颜色过于集中,使得图的可读性下降很多。因此需要对数据进行一些处理,具体的下次再说。
graphpadpri***7怎么做热图?如何使用graphpadpri***制作热图啊?点开Graphpadpri***7.0软件,如图所示。
将XY换成Grouped。如图所示。
点击heatmap(热图),点击create,开始热图绘制。
接着在Group底下那一栏输入你要研究的基因名称,在tableformatgrouped下方输入组别名称。如下图所示。
点击左侧的graphs底下的Data1,弹出如下对话框。
这里的热图有几种表现形式,你可以挑选你想要的形式,这里选择第四种。
点击ok,即可出现你想要的结果。
点击export,可输出你想要的图片来。这里选择tiff格式。
【R】热图绘制theme:是处理图美观的一个函数,可以调整横纵轴label的选择、图例的位置等。
这里选择X轴标签45度。
hjust和vjust调整标签的相对位置,
具体见下图。
简单说,hjust是水平的对齐方式,0为左,1为右,0.5居中,0-1之间可以取任意值。
vjust是垂直对齐方式,0底对齐,1为顶对齐,0.5居中,0-1之间可以取任意值。
,可以接受的值有top,bottom,left,right,和一个坐标c(0.05,0.8)(左上角,坐标是相对于图的左下角(即原点)计算的)
为了更好的可视化效果,需要对数据做些预处理,主要有对数转换,Z-score转换,抹去异常值,非线性颜色等方式。
Z-score又称为标准分数,是一组数中的每个数减去这一组数的平均值再除以这一组数的标准差,代表的是原始分数距离原始平均值的距离,以标准差为单位。可以对不同分布的各原始分数进行比较,用来反映数据的相对变化趋势,而非绝对变化量。
正常来讲,颜色的赋予在最小值到最大值之间是均匀分布的。如果最小值到最大值之间用100个颜色区分,则其中每一个bin,不论其大小、有没有值都会赋予一个颜色。非线性颜色则是对数据比较小但密集的地方赋予更多颜色,数据大但分布散的地方赋予更少颜色,这样既能加大区分度,又最小的影响原始数值。通常可以根据数据模式,手动设置颜色区间。为了方便自动化处理,也可选择用四分位数的方式设置颜色区间。
如果想保持图中每一行的顺序与输入的数据框一致,需要设置因子的水平。这也是ggplot2中调整图例或横纵轴字符顺序的常用方式。
绘制热图除了使用ggplot2,还可以有其它的包或函数,比如pheatmap::pheatmap(pheatmap包中的pheatmap函数)、gplots::heatmap.2等。
相比于ggplot2作heatmap,pheatmap会更为简单一些,一个函数设置不同的参数,可以完成行列聚类、行列注释、Z-score计算、颜色自定义等。
给矩阵的行和列进行分组注释