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>>
用一张图片来概括这个过程:
这里需要注意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
“左闭右开”,画图例的时候也许用得到。