天天看点

R软件轻松实现热图、太阳花图、花瓣图、圈图——圈热太阳花瓣

作者:甲亥13可观4th昇

热图不只是差异基因表达,机器学习领域一样使用

热图可以实现“生信”领域的差异表达基因,展示在不同分组样品中的表达水平;一般一列表示一个样品,一行表示一个基因,其中的颜色表示的相对表达值。

R软件轻松实现热图、太阳花图、花瓣图、圈图——圈热太阳花瓣

实际上,热图还与“高大上”的芯片设计、机器学习有着密切的关系;毕竟原理相通,核心的东西只有那么“一套把戏”而已。

在芯片设计、机器学习领域,只需要把表达的信息名称对应上“芯片引脚”~“电平信号”或者“图像噪声”~“算法”,一样可以实现!R最大的优势就是数据信息可视化能力。

R软件轻松实现热图、太阳花图、花瓣图、圈图——圈热太阳花瓣

热图本质上就是聚类的可视化。在 R 中,基础包 stats 提供了一个层次聚类的函数hclust,即 Hierarchical Clustering 的缩写。该函数的基本思路是:

  1. 将需要聚类的对象单独作为一类 cluster;
  2. 根据算法(比如 complete linkage)将两个最相似的 cluster 聚为一类;
  3. 重复 2 过程,直到所有 cluster 都聚为一类。
R软件轻松实现热图、太阳花图、花瓣图、圈图——圈热太阳花瓣

太阳花图用来克服散点图中数据点重叠问题

太阳花图(sunflower plot),也称为向日葵散点图;太阳花图是在特定的图形位置上使用不同的字符。

library(car); cc<-Vocab; names(cc)

[1] "year" "sex" "education" "vocabulary"

plot(cc[,3:4],col=rainbow(22),cex=2,pch=17,las=1,col.axis='blue',ann=F,tck=0.01)

R软件轻松实现热图、太阳花图、花瓣图、圈图——圈热太阳花瓣

数据集cc共有30351个数据点,在上图中无法看出哪些数据点存在重叠?太阳花图可以在有重叠的地方用一朵“向日葵”的花瓣数目来表示重叠数据的个数;下图就可以实现对分散数据交叉重叠情况的比较。

sunflowerplot(cc[,3:4],seg.col='blue',cex=1.6,col='red')

R软件轻松实现热图、太阳花图、花瓣图、圈图——圈热太阳花瓣

图中左上角数据点只有上、下两个花瓣,代表该数据点大于10和小于10的位置各有一个数据;如果某点花瓣数量很多,表示该点位置前后左右重叠的数据量越大;蓝色实心圆圈表示有很多很多的数据点。

随机数据的“太阳花”

aaa<-round(rnorm(100));aaa<-rep(aaa,5);aaa<-jitter(aaa,3);aaa

par(las=1,col.axis='lightblue',tck=0.01,ann=F)

sunflowerplot(1:500/500,sample(aaa,500),digits=1,pch=13,cex=1.1,col='red',seg.col='blue',seg.lwd=2)

R软件轻松实现热图、太阳花图、花瓣图、圈图——圈热太阳花瓣

sunflowerplot(rnorm(500),sample(aaa,500),digits=1,pch=19,cex=1.1,col='red',seg.col='blue',seg.lwd=2)

R软件轻松实现热图、太阳花图、花瓣图、圈图——圈热太阳花瓣
digits 当number参数未被指定, x数据列在计算重数之前y四舍五入到digits有效数字。

如果数据量不是太大,可以在使用“轴须图”的方式来显示数据量的分布密度;

R软件轻松实现热图、太阳花图、花瓣图、圈图——圈热太阳花瓣

hist(cc[1:290,4],prob=T,breaks=9,labels=T,col=rainbow(9),ann=F)

rug(jitter(cc[1:290,4],amount=0.7), col = "red")

lines(density(cc[1:290,4]),col='blue',lwd=3,lty=3)

花瓣图充分展示分组信息

绘制venn图最多支持5组数据,当组别数大于5时,venn图即使能够画出来,看上去也非常复杂,不够直观;在实际的数据分析中,组别大于5的情况还是经常遇到的,这时就可以考虑用花瓣图来进行数据的可视化。

花瓣图中,所有样本都有共同的信息,但是每个样本也有独有的信息;花瓣图既美观,展示的信息也很直观。如下图所示:

R软件轻松实现热图、太阳花图、花瓣图、圈图——圈热太阳花瓣

相关代码参见:R语言绘制花瓣图flower plot - 庐州月光 - 博客园

上图对其中代码的相关参数作了系统的调整,也调整了部分文本内容,还改变了颜色的显示及图形布局的设计;其实,只要熟悉底层的绘图指令,很快就能实现。

最高境界的“圈图”的实现

“圈图”尤其适合“生信”中的基因表达;只要安装上circlize包,实现看似极为“高大上”的圈图,也是分分钟的事情。

R软件轻松实现热图、太阳花图、花瓣图、圈图——圈热太阳花瓣

继续阅读