热图绘制热图是做分析时常用的展示方式,简单、直观、清晰。可以用来显示基因在不同样品中表达的高低、表观修饰水平的高低等。任何一个数值矩阵都可以通过合适的方式用热图展示。 本篇使用R的 上一篇讲述了Rstudio的使用作为R写作和编译环境的入门,后面的命令都可以拷贝到Rstudio中运行,或写成一个R脚本,使用 生成测试数据绘图首先需要数据。通过生成一堆的向量,转换为矩阵,得到想要的数据。 data <->->1:6,6:1,6:1,1:6, (6:1)/10,(1:6)/10,(1:6)/10,(6:1)/10,1:6,6:1,6:1,1:6, 6:1,1:6,1:6,6:1) [1] 1.0 2.0 3.0 4.0 5.0 6.0 6.0 5.0 4.0 3.0 2.0 1.0 6.0 5.0 4.0 3.0 2.0 1.0 1.0[20] 2.0 3.0 4.0 5.0 6.0 0.6 0.5 0.4 0.3 0.2 0.1 0.1 0.2 0.3 0.4 0.5 0.6 0.1 0.2[39] 0.3 0.4 0.5 0.6 0.6 0.5 0.4 0.3 0.2 0.1 1.0 2.0 3.0 4.0 5.0 6.0 6.0 5.0 4.0[58] 3.0 2.0 1.0 6.0 5.0 4.0 3.0 2.0 1.0 1.0 2.0 3.0 4.0 5.0 6.0 6.0 5.0 4.0 3.0[77] 2.0 1.0 1.0 2.0 3.0 4.0 5.0 6.0 1.0 2.0 3.0 4.0 5.0 6.0 6.0 5.0 4.0 3.0 2.0[96] 1.0 注意:运算符的优先级。 > 1:3+4 Vector转为矩阵 (matrix),再转为数据框 (data.frame)。 # ncol: 指定列数 V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V121 1.0 2.0 3.0 4.0 5.0 6.0 6.0 5.0 4.0 3.0 2.0 1.02 6.0 5.0 4.0 3.0 2.0 1.0 1.0 2.0 3.0 4.0 5.0 6.03 0.6 0.5 0.4 0.3 0.2 0.1 0.1 0.2 0.3 0.4 0.5 0.64 0.1 0.2 0.3 0.4 0.5 0.6 0.6 0.5 0.4 0.3 0.2 0.15 1.0 2.0 3.0 4.0 5.0 6.0 6.0 5.0 4.0 3.0 2.0 1.06 6.0 5.0 4.0 3.0 2.0 1.0 1.0 2.0 3.0 4.0 5.0 6.07 6.0 5.0 4.0 3.0 2.0 1.0 1.0 2.0 3.0 4.0 5.0 6.08 1.0 2.0 3.0 4.0 5.0 6.0 6.0 5.0 4.0 3.0 2.0 1.0 # 增加列的名字 Zygote 2_cell 4_cell 8_cellGene_1 1.0 2.0 3.0 4.0Gene_2 6.0 5.0 4.0 3.0Gene_3 0.6 0.5 0.4 0.3Gene_4 0.1 0.2 0.3 0.4Gene_5 1.0 2.0 3.0 4.0Gene_6 6.0 5.0 4.0 3.0 虽然方法比较繁琐,但一个数值矩阵已经获得了。 还有另外2种获取数值矩阵的方式。
# 使用字符串的好处是不需要额外提供文件 可以看到列名字中以数字开头的列都加了X。一般要尽量避免行或列名字以数字开头,会给后续分析带去一些困难;另外名字中出现的非字母、数字、下划线、点的字符都会被转为点,也需要注意,尽量只用字母、下划线和数字。 # 读入时,增加一个参数`check.names=F`也可以解决问题。
与上一步类似,只是改为文件名,不再赘述。 > data2 <->->'filename',sep=';', header=T, row.names=1, quote='') 转换数据格式数据读入后,还需要一步格式转换。在使用ggplot2作图时,有一种长表格模式是最为常用的,尤其是数据不规则时,更应该使用 (这点,我们在讲解箱线图时再说)。
ID variable value1 Gene_1 Zygote 1.02 Gene_2 Zygote 6.03 Gene_3 Zygote 0.64 Gene_4 Zygote 0.15 Gene_5 Zygote 1.06 Gene_6 Zygote 6.07 Gene_7 Zygote 6.08 Gene_8 Zygote 1.09 Gene_1 2_cell 2.010 Gene_2 2_cell 5.011 Gene_3 2_cell 0.512 Gene_4 2_cell 0.213 Gene_5 2_cell 2.014 Gene_6 2_cell 5.015 Gene_7 2_cell 5.016 Gene_8 2_cell 2.0 分解绘图数据转换后就可以画图了,分解命令如下: # data_m: 是前面费了九牛二虎之力得到的数据表 热图出来了,但有点不对劲,横轴重叠一起了。一个办法是调整图像的宽度,另一个是旋转横轴标记。 # theme: 是处理图美观的一个函数,可以调整横纵轴label的选择、图例的位置等。 设置想要的颜色。 # 连续的数字,指定最小数值代表的颜色和最大数值赋予的颜色 调整legend的位置。 # postion可以接受的值有 top, bottom, left, right, 和一个坐标 c(0.05,0.8) (左上角,坐标是相对于图的左下角计算的) 调整背景和背景格线以及X轴、Y轴的标题。(注意灰色的背景没了) p <- p="" +="">->'samples') + theme_bw() + theme(panel.grid.major = element_blank()) + theme(legend.key=element_blank()) 合并以上命令,就得到了下面这个看似复杂的绘图命令。 p <- ggplot(data_m,="" aes(x="variable,y=ID))" +="">->'samples') + theme_bw() + theme(panel.grid.major = element_blank()) + theme(legend.key=element_blank()) + theme(axis.text.x=element_text(angle=45,hjust=1, vjust=1)) + theme(legend.position='top') + geom_tile(aes(fill=value)) + scale_fill_gradient(low = 'white', high = 'red') 图形存储图形出来了,就得考虑存储了, # 可以跟输出文件不同的后缀,以获得不同的输出格式 至此,完成了简单的heatmap的绘图。但实际绘制时,经常会碰到由于数值变化很大,导致颜色过于集中,使得图的可读性下降很多。因此需要对数据进行一些处理,具体的下次再说。 |
|