r语言森林图怎么画(R实现热图太阳花图)
热图可以实现“生信”领域的差异表达基因,展示在不同分组样品中的表达水平;一般一列表示一个样品,一行表示一个基因,其中的颜色表示的相对表达值。
实际上,热图还与“高大上”的芯片设计、机器学习有着密切的关系;毕竟原理相通,核心的东西只有那么“一套把戏”而已。
在芯片设计、机器学习领域,只需要把表达的信息名称对应上“芯片引脚”~“电平信号”或者“图像噪声”~“算法”,一样可以实现!R最大的优势就是数据信息可视化能力。
热图本质上就是聚类的可视化。在 R 中,基础包 stats 提供了一个层次聚类的函数hclust,即 Hierarchical clustering 的缩写。该函数的基本思路是:
- 将需要聚类的对象单独作为一类 cluster;
- 根据算法(比如 complete linkage)将两个最相似的 cluster 聚为一类;
- 重复 2 过程,直到所有 cluster 都聚为一类。
太阳花图用来克服散点图中数据点重叠问题
太阳花图(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)
数据集cc共有30351个数据点,在上图中无法看出哪些数据点存在重叠?太阳花图可以在有重叠的地方用一朵“向日葵”的花瓣数目来表示重叠数据的个数;下图就可以实现对分散数据交叉重叠情况的比较。
sunflowerplot(cc[,3:4],seg.col='blue',cex=1.6,col='red')
图中左上角数据点只有上、下两个花瓣,代表该数据点大于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)
sunflowerplot(rnorm(500),sample(aaa,500),digits=1,pch=19,cex=1.1,col='red',seg.col='blue',seg.lwd=2)
digits |
当number参数未被指定, 在计算重数之前y四舍五入到digits有效数字。 |
如果数据量不是太大,可用“轴须图”的方式来显示数据量的分布密度。
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")
花瓣图充分展示分组信息
绘制venn图最多支持5组数据,当组别数大于5时,venn图即使能够画出来,看上去也非常复杂,不够直观;在实际的数据分析中,组别大于5的情况还是经常遇到的,这时就可以考虑用花瓣图来进行数据的可视化。
花瓣图中,所有样本都有共同的信息,但是每个样本也有独有的信息;花瓣图既美观,展示的信息也很直观。如下图所示:
相关代码参见:R语言绘制花瓣图flower plot - 庐州月光 - 博客园
上图对其中代码的相关参数作了系统的调整,也调整了部分文本内容,还改变了颜色的显示及图形布局的设计;其实,只要熟悉底层的绘图指令,很快就能实现。
最高境界的“圈图”的实现
“圈图”尤其适合“生信”中的基因表达;只要安装上circlize包,实现看似极为“高大上”的圈图,也是分分钟的事情。
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com