生信科研信息学生信科研

如何自定义circos图的配色

2019-08-08  本文已影响52人  TOP生物信息
1.先来认识一下circos的配色体系

下载安装circos之后,在安装目录下面有一个png图片,上面显示的是circos支持的配色和字体样式。

在绘图过程中如何调用颜色?我用得比较多的是上面这三种,分别是这样的:

#1
##调用一套颜色,这里的3就是每套颜色前面的序号
eg: color  = reds-3-seq
##调用一套颜色中的某一个颜色,这里的1是指该颜色在这一套颜色中排第几个
eg: color  = reds-3-seq-1

#2
##专门给染色体配色的,1是颜色前面的编号
eg: color = chr1

#3
##几种常用颜色,注意编号要加到前面
eg: color = vdblue

其他类型的颜色的使用应该也是类似的。

在上一篇小白的circos学习笔记(一)中,我说我“习惯把所有配置写到一个文件”,在这个文件的最下方是默认配置,一般是不用改的。

<image>
<<include etc/image.conf>>
</image>
<<include etc/colors_fonts_patterns.conf>>
<<include etc/housekeeping.conf>>

其中的etc/colors_fonts_patterns.conf是关于配色的,程序会根据这一行去找配色的文件,etc这个文件夹也是在安装目录下面。按照它说的,去看看这个文件:

<colors>
<<include etc/colors.conf>>
</colors>
<fonts>
<<include etc/fonts.conf>>
</fonts>
<patterns>
<<include etc/patterns.conf>>
</patterns>

从内容来看,这是告诉程序去哪里找配色、字体、模式。接着去看看colors.conf文件,从内容来看,它是定义RGB颜色的主文件,不过从文件末尾来看,它仍然调用了三个现成的配色文件。其中colors.brewer.conf就是前面我在图片上标了1的那些颜色,colors.ucsc.conf就是前面我在图片上标了2的那些染色体的颜色。

vvlpred = 255,82,82
vvlpgreen = 145,255,145
vvlblue = blues-7-seq-1 #这个颜色不是用RGB定义的,它来源于后面调用的'colors.brewer.conf'文件
#等等
# Brewer palette
 <<include colors.brewer.conf>>
# chromosome color map (UCSC) 
<<include colors.ucsc.conf>>
# HSV pure colors 
<<include colors.hsv.conf>>

用一张图片来概括这个过程:

图2

这里需要注意colors.brewer.conf的内容,下文会用到。

png里面的配色样式能满足绝大多数时候的需求,但也有例外。

2.关于circos热图的配色,我的几点浅显认识
场景1

  在画热图的时候,可以先看一下数值和频数的分布图,再考虑颜色是用离散的还是渐变的;如果是渐变的,那是单一渐变色还是成对渐变的,还是多种颜色组合的(比如黄、绿、蓝渐变色);同时还要考虑分成几个色块。考虑好了之后再在png上面找合适的颜色。

  看一下这张图,原本是连续的数据中间少了一部分。比如这是log2(FC),现在将(-1,1)之间的数据全部都不予考虑,剩下的数据做热图来呈现基因表达量上调或下调的程度。设想一下,如果此时还是将这些数据放在一起做图,不管是一个渐变色还是组合渐变色,最终呈现出来的效果图肯定会有颜色“跳跃”,图例上的色差会更明显。

我的想法是将>=1和<=-1的数据分开,分别用一套渐变色,接近-1和1的过渡色可以自己设置,比如浅黄过渡到浅绿,这样就不突兀了。

场景2

  有时还会遇到另一个问题,你的数据是这样的,当值很小时占比很大。很多渐变色第一个色块很浅,这时画出来的图整体就会很浅,一点都不“鲜艳”。要是能直接从渐变色的第二或是第三个颜色开始就好多了。

场景3

也许你还想组合一些色块得到想到的调色板

以下方法可以自定义circos配色,不能保证这个方法很好,但一定管用。
原理就是替换colors.brewer.conf里面的RGB配色。

3.如何自定义circos图的配色

这是我最终自定义的调色板,运用到了热图中,上调的基因偏绿色,下调的基因偏橙色。

做法

1.先在png上找准自己想要截取或是拼接(拼接我没有演示,方法是一样的)的颜色,在colors.brewer.conf上找到它的RGB数值;
2.创建一个tmp文件,根据你想要的颜色集合的整体颜色色块数量给你的颜色集合取一个名字,这个名字在colors.brewer.conf能找到,具体什么名字不重要,重要的是色块数量相同以及能找到;
3.将你找到的RGB和你取的名字对应起来,就像这样:

#tmp文件
#blues-5-seq-1等等都在colors.brewer.conf可以找到
blues-5-seq-1 = 204,235,197
blues-5-seq-2 = 168,221,181
blues-5-seq-3 = 123,204,196
blues-5-seq-4 = 78,179,211
blues-5-seq-5 = 43,140,190


orrd-3-seq-1 = 255,255,212
orrd-3-seq-2 = 254,196,79
orrd-3-seq-3 = 217,95,14

4.打开colors.brewer.conf文件,搜索“blues-5-seq”和“orrd-3-seq”做以下更改:

blues-5-seq = blues-5-seq-(\d+)
blues-5-seq-rev = rev(blues-5-seq-(\d+))
#blues-5-seq-1 = 239,243,255
#blues-5-seq-2 = 189,215,231
#blues-5-seq-3 = 107,174,214
#blues-5-seq-4 = 49,130,189
#blues-5-seq-5 = 8,81,156
blues-5-seq-1 = 204,235,197
blues-5-seq-2 = 168,221,181
blues-5-seq-3 = 123,204,196
blues-5-seq-4 = 78,179,211
blues-5-seq-5 = 43,140,190

......

orrd-3-seq = orrd-3-seq-(\d+)
orrd-3-seq-rev = rev(orrd-3-seq-(\d+))
#orrd-3-seq-1 = 254,232,200
#orrd-3-seq-2 = 253,187,132
#orrd-3-seq-3 = 227,74,51
orrd-3-seq-1 = 255,255,212
orrd-3-seq-2 = 254,196,79
orrd-3-seq-3 = 217,95,14

保存。最好将colors.brewer.conf拷贝一份。
5.正常运行主绘图程序
6.将colors.brewer.conf改回原来的亚子

简单来说,就是“骗”了一下绘图程序。上面第二点强调这个名字(实例中就是blues-5-seq和orrd-3-seq)一定是colors.brewer.conf文件中有的,因为我尝试了仿照图2中colors.brewer.conf文件中定义颜色的格式自己添加一套颜色并取一个类似myblues-9-seq的名字,发现没有起作用。我的猜测是colors.brewer.conf文件中颜色名不可更改(颜色名集合不变或是颜色名有规律,而这个规律我恰好不知道)


最后再分享一个关于色块与数值对应关系的小知识点,比如我有一堆[1,10]的连续的数值,画热图的时候,选了一个9个色块的渐变色,数值与色块的对应关系是:

[1,2)  颜色1
[2,3) 颜色2
[3,4) 颜色3
......
[8,9) 颜色8
[9,10] 颜色9

“左闭右开”,画图例的时候也许用得到。

上一篇下一篇

猜你喜欢

热点阅读