首先来看看这样一幅图。
看到它的第一感觉就是,这是什么东西!没错,这样一个圆形的、错综复杂的图就是弦图,属于圈图的一种,在高大上的生物学文章中会经常见到。那么这么复杂的图究竟是用来做什么的呢?别看图形让人眼花缭乱,它所表达的内容其实很简单,我总结了一下,弦图的作用大概分为两个部分。
第一,也是最重要的一点:高大上,让人眼花缭乱。
没错,当你第一次看到它,心里想,卧槽,这是啥的时候,弦图最重要的作用也就完成了。
好了好了,不黑弦图了,哈哈哈。
第二,才是最重要的一点:展示多个对象之间的关系。
比如说,你是一个国际关系学院的学生,你有全球180个国家的贸易往来数据,你想用一张图来展示每一个国家之间往来的频率是高还是低,这些国家之间的关系是紧密还是疏离,那么弦图就是最好的选择了。(话说难道不是搞一个excel表格想看哪个国家看哪个国家就行了吗,180个国家的数据放到一张图里还不看到你眼瞎?如果有这个疑问,请参考上面说的弦图的作用第一点。)
那么对于一个生物学的学生来说呢,弦图可以用来展示多个研究对象基因突变的情况,或者多个研究对象的生理指标变化的情况,只要你想用,弦图应用的场合还是很多的。
举个栗子
还是从实例来看,假如你做了这样一个实验,你测定了5个细胞中5个染色体上面的基因突变个数,获得了如下的数据。
当然,这种情况下你可以用分组柱状图的形式展示你的数据,但如果用弦图的话,你将会得到这样一张图。
这样就很好理解了对吧,每一个细胞对应每一条染色体都有一条纽带连接,哪一条纽带越宽,说明这个细胞中的这一条染色体上面突变的最多。当然,如果你有更多维度的数据,你也可也用纽带的颜色,纽带离边缘的距离等等参数去表示多个维度的数据。
大佬是怎么做的?
这是一张来源于今年的Nature Methods上的文章 Scalable whole-genome single-cell library preparation without preamplification中的一幅弦图,具体展示的数据指标我们先忽略,大佬用纽带的颜色代表了不同染色体之间的关系强弱,而没有用纽带的宽窄等参数,配色也采用偏冷色的色调,显得更加严肃。
我们怎么做?
R中有一个专门用来做圈图的包,叫做circlize,除了弦图以外的各种圆形图都可以做,非常方便。
首先安装并载入circlize包。
> library(circlize)
然后将我们的数据导入,并放在一个矩阵当中,这里我的瞎编数据矩阵叫做mutation。
弦图中的元素其实就包括两部分,外层的圈,代表各个研究对象;内层的纽带,代表各研究对象之间的关系。在画弦图之前我们要设置一下外圈各个对象的颜色,这里我们将各个染色体都设置成灰色,将5个细胞分别设置为5种颜色。然后要设置一下对象之间的缝隙,细胞要和细胞挨得近一些,染色体要和染色体挨得近一些,细胞和染色体之间缝隙要大一点。
> #设置各对象之间的缝隙,使用circos.par函数中的gap.after参数
> gap <- c(rep(5, nrow(mutation) - 1), 15, rep(5, ncol(mutation) - 1), 15)
> circos.par(gap.after = gap)
> #设置各外圈对象颜色,并绘制弦图
> grid.col <- c(细胞1 = "red", 细胞2 = "green", 细胞3 = "blue", 细胞4 = "yellow", 细胞5 = "violetred", 染色体1 = "grey", 染色体2 = "grey", 染色体3 = "grey", 染色体4 = "grey", 染色体5 = "grey")
> chordDiagram(mutation, grid.col = grid.col)
可以看到绘制的过程非常简单,通过circos.par函数设置一些参数,通过chordDiagram函数绘制弦图。当然,你也可以设置许多参数,比如纽带的颜色,外围标签,背景颜色,透明度,高亮重要信息等等。具体的方法在下面的网站中,有需要可以查阅,之后我也会将一些常用的作弦图的小技巧总结出来,毕竟啃英文文档的时候是一把辛酸泪呀。
Circular Visualization in R
http://zuguang.de/circlize_book/book/the-chorddiagram-function.html
参考文献
【1】Nature Methods, 2017, Scalable whole-genome single-cell library preparation without preamplification
【2】Bioinformatics Applications Note, 2014, circlize implements and enhances circular visualization in R
【3】Zuguang Gu, Circular Visualization in R
欢迎我的关注微信公众号——生物与化学数据分析,化学狗与生物狗学习数据分析的好地方!有问题随时提出哦!
aHR0cDovL3dlaXhpbi5xcS5jb20vci9ienY3NDNqRTdTV1NyVHlBOTI1OQ== (二维码自动识别)
原文地址:https://zhuanlan.zhihu.com/p/28360518 |