查看原文
其他

作Circos图不用学Perl了,我们有R!

2016-12-25 医生科研助手 解螺旋



特别福利:关注 "螺旋" 微信公众号,回复关键词"12月"可索取2016年12月资源包:Cell信号通路图。


作者:解螺旋.麦子

如需转载请注明来源:解螺旋·医生科研助手


导语

Circos近年越来越流行,因为它能高效地表现丰富的基因组数据啊~好想在自己的文章中也能用上!正心痒欲动时,突然听说要安装Circos软件,还要学Perl语言!然而我们只是想发文章的医僧又不是程序员,为什么要学这么多种计算机语言~>_<~我们已经有R语言的土壤了,难道不能一招搞定?


一说到Circos图,现在吃货麦子仍然能回忆起今年九月,浙大的张明方团队在Nature Genetics上发表的榨菜基因组测序成果(Nat.Genet.(2016). 48(10):1225-32.),这图、这配色,食色生香啊!本来正在埋头学习就这样饿了……



当然也有禁欲系的,像卢煜明团队发表的循环DNA全基因组测序分析并进行拷贝数变异检测,每一圈代表一种样本,每一段代表一条染色体,绿色的小点代表拷贝数增多,红点减少,灰点无拷贝数变异(Proc Natl Acad Sci U S A. 2015 Oct6;112(40):E5503-12.)。这么寡淡的图,心猿意马又只好滚回来学习了=_=



不管哪种,用一个圈就能搞定一个基因组几百M甚至上G的数据量,好高大上啊!然而为了数据可视化的其中一种形式而去安装一套专门的软件,总感觉有点浪费成本。不过我们现在真的有了R语言的解决方案,就是用circlize包,而这一切都要感谢本包包的开发者——一位在德国癌症研究中心修炼的华人博士后Zuguang Gu!古?谷?辜?暂时找不到他的中文名字写法,只是看到他的Git-hub个人主页是这种画风:




Git-hub是一个分享各种开源及私有软件的平台,程序猿们的窝点,这种画风还算正常吧。然而在ResearchGate,一个稍严肃的学术交流平台,逗比蛊同学还是这个搞怪画风(^囧^)图我就不贴了,有兴趣的同学可以自行前去围观:https://www.researchgate.net/profile/Zuguang_Gu,这里面有他发表的关于circlize包开发及应用的文章,还有其他好玩的东西。看来又是一位放浪形骸的大神!


今天我们就专程来膜拜一下蛊大神的circlize包。

安装circlize包

circlize包已经上传到CRAN了,所以我们可以直接在RStudio中输入install.packages("circlize")运行安装。安装好后记得用library(circlize)载入。

准备数据

在circlize中,数据应该以框架形式组织起来,并且至少要用3列,第1列通常是字符串,决定一个圈中分为哪几个板块,这里我们以基因为例;第2列和第3列表示板块的长度,这里我们就用基因的起止点。后面的几列就可有可无,看自己需要了。我们暂时不用。




以前我们讲解过从Excel导入数据的方法:《R语言学习起来太费劲?那是你没找对领路人(Geek伪装指南)》,但从Excel导入要求文件的整个路径中都不能包含中文。所以现在再介绍另一种,就是在RStudio中直接录入数据,看自己喜好选用吧。


对于上面那个表,录入的方式是这样子:




列名和列的变量名当然可以不一样,但那是花样作死,还是用一样的吧。


两种方法都可以在工作中随时跟据需要补充数据。如果是直接录入的,就直接在每列的括号里加入数据,每行代码再运行一遍;如果要加一列,还要在data.frame后面加上相应的“列名=列的变量名”。


如果是从Excel导入的,补数据时,每列就是“列的变量名=c(Excel表名$列的变量名,补充的数据)”。加列的方法同上。

圈圈图的游戏

有了数据,出图就成了游戏。最简单的就是运行circos.genomicInitialize()函数,括号中是我们刚才录入的数据表名,在这里就是Example:


circos.genomicInitialize(Example),然后按Ctrl+Enter运行,得到了一个原始的圈:




看到每个基因的ID都标了出来,其上还有表示长度的刻度。但是这个原始圈太无聊了,我们来美化它。




这样就填上了颜色:




这里的颜色直接用名字,当然如果追求更高逼格的个性,也可以用十六进制码来表示,比如上面的浅蓝色就是‘#add8e6’,具体什么颜色对应什么码,网上搜“十六进制颜色码”也是一大把列表可以参考。


这里大家可以看到,光美化一下,函数里的括号就多了好几层。如果要做出其他更复杂的图,除了得有更丰富的数据(甚至是好几个表组成的list),还要用更复杂的函数,比如这个:




在圈圈里面加散点图,就要用刚才填颜色时用过的circos.genomicTrackPlotRegion()函数,在颜色圈的内层再加一个空白圈;函数的括号里面除了定义圈的宽度高度外,还要再套一个函数circos.genomicPoints(),这回括号内才是散点图的数据。


同理,也可以加上线条图(circos.genomicLines()):




热图(主要是circos.genomicRect()和colorRamp2()):




还能像这样把其中两个板块放大(zoom),然后再在原板块和放大的板块之间加个连接(circos.Link()):




等你消化完、掌握好这些高阶技能,你又发现,蛊大神画的图是这样的:




大神存在,就是为了调戏学海中苦苦挣扎的我们吗╮(╯▽╰)╭


我决定还是把circlize心法秘籍交出来,大家一起参悟吧:


1.circlizeImplements and enhances circular visualization in R


蛊大神2014年发表在Bioinformatics上的文章,对circlize包作提纲挈领的介绍,短小精悍。


2.Anintroduction of making genomic plots with circlize


cirlize的案例教程,本文的数据和图片主要来源。


3.Packagecirclize


circlize的鸿篇完整说明书。


回复“circlize”打包下载。


精彩内容回顾(回复左边数字查看):

61:非编码RNA类型及功能汇总,吐血推荐!

62:一文读懂 | 与自噬相关的mTOR信号通号

63:干货 | Oligo设计引物,就是这么简单

64:跟着13分文章学作图,等着收获SCI吧(origin8教程)

65:干货 | 磷酸化抗体使用必杀技

66:Discussion写作模板:从3分、5分到10分

67:一文包会:Web of science数据库应用宝典

68:读图 | qPCR那些奇奇怪怪的曲线都代表啥?

69:MicroRNA,如何实现从零基础到10分的跨越

70:ELISA实验操作中值得关注的细节大盘点

回复SCI、国自然、信号通路、CNS、实验工具、统计查看相应专栏文章!

投稿邮箱: tougao@helixlife.com.cn

合作微信:helixlife6

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存