本篇笔记主要记录conf文件中的一些语法和设置。可以帮助我们更好的理解conf文件,从而可以画出很复杂的图。官网的教程:here。这一章节的内容都非常的细碎,个人感觉没有必要都记住,只是在以后circos使用中可以查询,比如颜色的设定,以及一些参数的设置方法。
Circos生成静态图像。映像生成过程由一个中心configuration文件驱动。该文件通常导入其他配置文件,如全局颜色和字体设置。
工作流通常按照如下方式进行:
- 确定如何显示数据(这是比较困难的部分)
- 解析数据文件成Circos格式
- 从头开始构建conf文件(或者使用其中一个教程作为模板)
- 运行Circos创建PNG和SVG图片
- 编辑PNG/SVG文件以便发表(添加图例、附加文本标签等)。
(一)CONFIGURATION语法
使用Config::General模块解析配置文件。所有相关的特性都将在下面进行描述,但如果有兴趣,请参阅这个模块的手册页module's man page,以了解这些文件的语法和解析的详细信息。
设置使用该格式在conf文件中定义:
variable = value
注意:尽管Config::General支持使用空格作为赋值分隔符,但Circos要求对所有设置使用=。
一些设置分组在block中,以创建层次结构:
<ideogram>
thickness = 30p
fill = yes
...
</ideogram>
有些blocks可以有多个实例,比如data tracks。通常来说,这些被包含在另外的一个block里,叫做<links>:
<links>
<link>
file = data/set1.txt
color = black
...
</link>
<link>
file = data/set2.txt
color = red
...
</link>
</links>
请确保使用适当的关闭block标记,正确终止所有配置块。如果没有关闭标记,会报错。
(二)4种指定配置参数的方式:全局、跟踪、数据和规则(GLOBAL, TRACK, DATA ,RULES)
可以在四个位置指定配置参数,按其重要性的顺序排列:
- 对于所有(globally)plot tracks中的所有数据点(在<plots>or <links>中)
- 局部(locally)用于给定地块轨迹(或区块)中的所有数据点
- 对于单个数据点(在数据文件中)
- 使用rule(在<rule> block中)
在rule里对一个参数的设置会覆盖掉数据文件里的设置,一个数据文件参数会覆盖掉任何一个<plot> 或<link> block里的设置,而<plot> 或<link> block里的参数设置会覆盖掉全局设置。
<plots>
# 全局parameter
fill_color = white
<plot>
... # 其他plot参数, 例如文件,类型,位置等等
# 局部track设置-会覆盖掉上面的fill_color=white value
fill_color = grey
# 在文件数据里data.txt:
# ...
# hs1 10 20 0.50 fill_color=dblue #这是对单个数据点的设置,这个设置会覆盖掉局部的设置
<rules>
<rule>
condition = var(value) < 0.33
# specific to data points matching the condition, overrides any previously specified
# fill_color value, (global, local, data file)
fill_color = orange
</rule>
</rules>
</plot>
</plots>
如果你需要绘制大量类似的tracks(例如,直方图、热图等),尽可能用全局参数。尤其结合 automated track placement with track counters
(自动tracks计数器)会非常有用。在下面的例子中,每个图都是一个具有相同的最小/最大值和颜色的热图。在单个<plot> blocks中,只需要指定特定于该block的参数:
<plots>
type = heatmap
min = 0
max = 1
# 这个颜色名是一个列表,下面会讲到color lists
color = spectral-4-div
<plot>
file = data.1.txt
r1 = 0.6r
r0 = 0.5r
...
</plot>
<plot>
file = data.2.txt
r1 = 0.7r
r0 = 0.6r
...
</plot>
<plot>
file = data.3.txt
r1 = 0.8r
r0 = 0.7r
...
</plot>
<plot>
file = data.4.txt
r1 = 0.9r
r0 = 0.8r
...
</plot>
…
</plots>
(三)外部导入
有些参数的设置从不更改或很少更改,比如颜色和字体。为了保持主配置文件模块化,这些静态值的文件使用<<include ...>> 指令来导入。
有两个文件,通常从Circos distribution里的etc/导入,它们是:
# colors, fonts and fill patterns
<<include etc/colors_fonts_patterns.conf>>
# system and debug parameters
<<include etc/housekeeping.conf>>
按照惯例,ideogram的配置内容存储在外部文件ideogram.conf里,标记格式储存在ticks.conf中。这样做的原因是这些设置相当冗长,但与数据集无关。通过从外部文件导入ideogram的配置内容和标记格式设置:
<<include ideogram.conf>>
<<include ticks.conf>>
通常来说,ideogram.conf和ticks.conf 应该和circos.conf放在同一个文件夹里,所以不需要加上文件路径。
(四)动态评估参数
在conf文件里,参数通常用语法来设置常量,格式:
variable = value
比如说:
color = blue
(1)访问配置值
任何参数都可以使用语法设置为另一个参数的值,例如:
track_color = blue
<plots>
<plot>
color = conf(track_color)
...
当解析conf文件时,会进行简单的替换,直到所有conf(参数)字符串都被值替换为止。在使用此语法时,请确保包含参数的完整块路径,比如:
<block1>
<block2>
parameter1 = ...
</block2>
</block1>
这时你应该使用:conf(block1,block2,parameter1)
(2)对参数执行操作
任何参数都可以作为Perl代码编写,并在运行时进行计算。要使用此特性,请将参数包含在eval()函数中。(这里要说一句,eval这个函数在perl里是帮助我们捕获严重错误的,防止perl program崩溃——小骆驼书第七版最后一章)
比如:
thickness = eval(1+1)
color = eval("b"."l"."u"."e")
eval()特性在引用和操作其他配置参数时非常有用,比如说:
track_color = blue
track_width = 100
track_start = 0.5
<plots>
<plot>
# color=blue
color = conf(track_color)
# r0 = 0.5r
r0 = eval(conf(track_start) . "r")#小数点是连接符
# r1 = 0.5r+100p
r1 = eval(conf(track_start) . "r" + conf(track_width) . "p")
</plot>
</plots>
如果你只需要定义一个参数,则不需要eval(),因为只需要一个替换。但是,如果你需要对这个值进行操作(例如,附加一个字符串,执行计算等等),那么eval()是必需的,因为你输入的表达式必须作为代码计算。
举个例子:
#下面的代码就没有问题
x = eval( 1.05 . "r" ) #正确代码
# 但是如果你的r不加引号,就不可以。因为r在这里代表字符,如果不加引号,perl会把它看成是bare word进行解释,产生错误:
x = eval( 1.05 . r ) #错误代码
在<rule>里的eval()中的参数被看成是每个数据点独立的参数。
(五)颜色
在conf主配置文件里,颜色的配置文件被包含在内:
# circos.conf
<<include etc/colors_fonts_patterns.conf>>
...
这里主要包括RGB和HSV颜色的定义,你也可以参看Color Palettes Matter来参考更多颜色。
etc/colors.conf文件被包括在etc/colors_fonts_patterns.conf内, 其中包括这些颜色的定义:
# etc/colors.conf
# primary RGB colors
...
# Brewer palettes
# see etc/colors.brewer.conf
<<include colors.brewer.conf>>
# UCSC genome browser human chromosome colors
# see etc/colors.ucsc.conf
<<include colors.ucsc.conf>>
# HSV pure colors
# see etc/colors.hsv.conf
<<include colors.hsv.conf>>
(1)使用颜色
使用RGB的值或颜色的名字来定义:
# using RGB values
color = 107,174,241
# using name
color = blue
比如说,你想在染色体的某一段加颜色:
# using a color name
chr1 100 200 chr2 200 250 color=blue,thickness=2
# using RGB value
chr1 100 200 chr2 200 250 color=(107,174,241),thickness=2
(2)颜色名字
Circos中的颜色由RGB或HSV值定义,并由名称指定(如红色、橙色等)。许多命名的颜色与Brewer palette是一样的。
# 纯橘色
porange = 255,127,0
# 深紫橘色
dporange = 234,110,0
# points to Brewer color...
orange = oranges-7-seq-4
# ...which is defined in colors.brewer.conf as
oranges-7-seq-4 = 253,141,60
通常,对于一个给定的颜色根名称(例如橙色),有相应的颜色前缀d(深),l(浅)。浅颜色版本可以加一个或多个v (very)前缀。这些色调指向连续的Brewer调色板的颜色。例如,橙色分7种颜色的Brewer palette:
vvlorange = oranges-7-seq-1
vlorange = oranges-7-seq-2
lorange = oranges-7-seq-3
orange = oranges-7-seq-4
dorange = oranges-7-seq-5
vdorange = oranges-7-seq-6
vvdorange = oranges-7-seq-7
#注:
vvl{name} - very very light version of color
vl{name} - very light
l{name} - light
{name} - default tone
d{name} - dark
vd{name} - very dark
vvd{name} - very very dark
#纯色
vvlp{name} - very very light version of color
vlp{name} - very light
lp{name} - light
p{name} - default tone
dp{name} - dark
vdp{name} - very dark
vvdp{name} - very very dark
上面的颜色分别对应的数字是(colors.brewer.conf):
oranges-7-seq-1 = 254,237,222
oranges-7-seq-2 = 253,208,162
oranges-7-seq-3 = 253,174,107
oranges-7-seq-4 = 253,141,60
oranges-7-seq-5 = 241,105,19
oranges-7-seq-6 = 217,72,1
oranges-7-seq-7 = 140,45,4
如果你想要纯色,饱和的颜色,使用p前缀。例如,porange是一种纯亮橙色:
vvlporange = 255,182,106
vlporange = 255,164,82
lporange = 255,146,54
porange = 255,127,0
dporange = 234,110,0
vdporange = 213,92,0
vvdporange = 193,75,0
你可以在你安装的circos文件夹里找到etc/colors文件,查看完整的颜色列表。
一般建议尝试使用Brewer颜色(例如orange
vs porange
),因为它们感官上是统一的。然而,它们看起来饱和度没有那么高,比如说,Brewer红色单独使用时可能看上去是粉红色。
(3)Brewer颜色
Brewer颜色分为三种类型: 连续色,发散色和定性色。对于一个给定的调色板类型(例如连续色),有多种调色板(例如红色、绿色、蓝色)。每种调色板都有多种颜色可供选择(例如3,4,5,…)。
Brewer颜色名称的语法是palettename- ncolor- palettetype-index。每种类型的调色板名称是:
# 连续色sequential (-seq-) (3-9 colors)
blues
bugn
bupu
gnbu
greens
greys
oranges
orrd
pubu
pubugn
purd
purples
rdpu
reds
ylgn
ylgnbu
ylorbr
ylorrd
# 发散色diverging (-div-) (3-11 colors)
brbg
piyg
prgn
puor
rdbu
rdgy
rdylbu
rdylgn
spectral
# qualitative (-qual-) (3-8 colors, some up to 12 colors)
accent (3-8 colors)
dark2 (3-8 colors)
paired (3-12 colors)
pastel1 (3-9 colors)
pastel2 (3-8 colors)
set1 (3-9 colors)
set2 (3-8 colors)
set3 (3-12 colors)
比如:紫-橙发散色9色调色板的名字是: puor-9-div-1, puor-9-div-2, ..., puor-9-div-9.
(4)透明度
你可以通过设置alpha通道值来对某一个颜色进行透明度的设置:
# 0 < alpha < 1
# 0 opaque
# 1 transparent
red_faint = 255,255,255,0.8 #第四个参数就是透明度
# or alpha 0-127
# 0 opaque
# 127 transparent
red_also_faint = 255,255,255,102
(5)定义自己的颜色
如果你想定义自己喜欢的颜色,强烈建议将新的颜色定义放在一个单独的文件中。模块化将使维护代码更容易。如果你想要所有图像都用自定义颜色,就将它们包含在全局里,而不是逐个图像。
例如,如果你创建自己的蓝色:
# in mycolors.conf
niceblue = 17,111,227
你可以将这个文件包含在conf配置文件里:
# all default color definitions
<<include colors_fonts_patterns.conf>>
# this will append your definitions to the <colors> block
<colors>
<<include mycolors.conf>>
</colors>
你也可以直接快速的添加颜色:
# all default color definitions
<<include colors_fonts_patterns.conf>>
# this will append your definitions to the <colors> block
<colors>
<<include mycolors.conf>>
niceblue2 = 37,101,179
</colors>
(六)字体
circos使用的是CMU Modern字体。这些字体可以在fonts文件夹里找到:
light = fonts/modern/cmunbmr.otf # CMUBright-Roman
normal = fonts/modern/cmunbmr.otf # CMUBright-Roman
default = fonts/modern/cmunbmr.otf # CMUBright-Roman
semibold = fonts/modern/cmunbsr.otf # CMUBright-Semibold
bold = fonts/modern/cmunbbx.otf # CMUBright-Bold
italic = fonts/modern/cmunbmo.otf # CMUBright-Oblique
bolditalic = fonts/modern/cmunbxo.otf # CMUBright-BoldOblique
italicbold = fonts/modern/cmunbxo.otf # CMUBright-BoldOblique
(七)文件格式
Circos使用纯文本数据作为输入文件。数据格式非常简单,为Circos创建数据文件非常容易。
染色体定义,数据tracks(<plot> 块),links(<link> 块)和高亮(<highlight> 块)都需要外部文件来保存它们的内容。
根据tracks的不同,输入数据文件的格式也略有不同。
(1)核型
核型文件定义染色体。默认情况下,所有的染色体都会被绘制出来。
每条染色体都有名称、标签、开始和结束位置以及颜色。例如,人类核型文件看起来是这样的:
chr - hs1 1 0 249250621 chr1
chr - hs2 2 0 243199373 chr2
chr - hs3 3 0 198022430 chr3
...
Circos使用物种前缀作为染色体名称(例如,人类:hs1, hs2,…;小鼠:mm1, mm2,…),而不是通用的“chr”前缀。然而,染色体颜色使用“chr”前缀,因为它们并不是物种特异性的。
核型文件可以定义每个染色体的细胞遗传学条带。
band hs1 p36.33 p36.33 0 2300000 gneg
band hs1 p36.32 p36.32 2300000 5400000 gpos25
band hs1 p36.31 p36.31 5400000 7200000 gneg
...
你可以在data/karyotype文件夹里找到参考基因组文件。参考这个网址可以查看更多细节:karyotype tutorial
(2)其他图形
线、散点、直方图和热图轨迹都是二维数据tracks,它们与基因组位置相关联:
#chr start end value [options]
hs5 50 75 0.75
tile轨迹定义了同一染色体上的间隔。它用于显示覆盖元素,如reads或克隆:
#chr start end [options]
hs5 50 75
文本tracks将字符串与基因组位置相关联,通常用于文本标签:
#chr start end label [options]
hs5 50 75 ABC
如果要用多个文字文本标记,用tab作为分隔符。
一个connector track通常连接同一染色体上的两个位置,它们由斜面connector连接:
#chr start end [options]
hs5 50 1500 #需要注意的是必须是同一染色体
Links 是两个相同染色体或者不同染色体上的联系,可以作为lines或者ribbons画出来:
# chr1 start1 end1 chr2 start2 end2 [options]
hs1 200 300 hs10 1100 1300
hs7 50 150 hs 5000 6000 color=blue