circos软件学习笔记:语法、颜色、字体和文件格式

本篇笔记主要记录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颜色(例如orangevs 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
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容