circos 学习手册(二十三)

2D 数据绘制(四)

6. 文本标签—Basic

文本标签轨迹将文本字符串与基因组范围相关联。文本是径向放置的,对于散点图,文本的中心线位于跨度的中间。

6.1 数据格式

标签数据文件的格式类似于其他二维数据轨迹

...
hs1 225817866 225910748 ZNF678
hs1 26560711 26571853 ZNF683
hs1 40769819 40786426 ZNF684 color=red
hs1 149521414 149531004 ZNF687
...

第四个字段是文本标签,可选参数放置最后面

6.2 基本文本轨迹

基本文本轨迹定义如下

<plots>

<plot>
type             = text
color            = black
file             = data/6/text.genes.znf.txt

r0 = 0.4r
r1 = 0.8r

show_links     = yes
link_dims      = 4p,4p,8p,4p,4p
link_thickness = 2p
link_color     = red

label_size   = 24p
label_font   = condensed

padding  = 0p
rpadding = 0p

</plot>

</plots>
image.png
默认值

和其他轨迹一样,文本轨迹的参数定义在 etc/tracks/text.conf 文件中

label_font     = default
label_size     = 12
color          = black

r0             = 0.85r
r1             = 0.95r

show_links     = no
link_dims      = 2p,4p,8p,4p,2p
link_thickness = 1p
link_color     = red

padding        = 0p
rpadding       = 0p

label_snuggle             = no
max_snuggle_distance      = 1r
snuggle_sampling          = 1
snuggle_tolerance         = 0.25r

snuggle_refine                 = no
snuggle_link_overlap_test      = no
snuggle_link_overlap_tolerance = 2p

要取消默认定义,可以将指定参数设置为 undef

# undefine color, if you must
color = undef

取消所有默认值

<<include etc/housekeeping.conf>>
track_defaults* = undef

更粗暴点,直接把定义了默认值的文件删除

标签边界和缺失标签

标签限制在内半径 r0 和 外半径 r1 的环形空间内。如果一个标签不能贴在环形空间内,它就不会被画出来。

当标签很大,而轨迹很窄就会发生这种情况。

r0         = 1.05r
r1         = 1.1r
label_size = 100p

要检查标签是否全部放置进图像了,可以在命令行中运行

> circos ... -debug_group textplace
...
debuggroup textplace 2.06s not_placed hs1 10000 20000 gene1
debuggroup textplace 2.06s not_placed hs1 30000 40000 gene2
...

not_placed 的行表示该标签未放置。

为了使标签适应轨迹大小,最简单的方式就是增大 r1

r0         = 1.05r
r1         = 1.05r+300p 
label_size = 100p

6.3 堆叠标签

如果标签与另一个标签的位置发生重叠,为了避免标签绘制的重叠,则标签会在相同的角度但径向位置稍微外移的位置绘制

标签标注线

link_dims 参数指定将标签连接到其基因组位置的线的维度,因为标签可能会移动,所以需要这些连接线。

每个连接线有五个维度:

  • 外部填充
  • 外部线长度
  • 连接线长度
  • 内部线长度
  • 内部填充

6.4 文本朝向

目前,标签只能朝外,它们的连接线指向圆圈,标签在轨迹半径处左对齐

6.5 文本旋转

通过设置 参数,可以旋转不旋转标签。当标签很短时,非旋转效果很好

<plot>
...
label_rotate = no
</plot>

6.5 刻度标签

当设置 r0=1r 时,标签将绘制在刻度的位置上

<plot>
...
r0 = 1r
r1 = 1r+200p
show_links     = yes
link_dims      = 0p,0,50p,0p,10p
link_thickness = 2p
link_color     = red
</plot>

你需要调整 link_dims 使其足够长,以便将标签移出刻度区域。circos 不检查标签轨迹和刻度标签之间的重叠

7. 文本—堆叠

在前面的例子中,我们只绘制了一个标签,如果标签很密集,则它们会自动堆叠以避免重复

但是,如果设置 label_snuggle=yes,则可以稍微调整标签的径向位置以减少文本的层数

snuggling 是启发式的,不基于任何全局优化

<plot>

...
label_snuggle             = yes

# shift label up to 2x its height in pixels in the angular direction
max_snuggle_distance            = 2r

# sample possible label positions every 2 pixels
snuggle_sampling                = 2

snuggle_tolerance               = 0.25r

snuggle_link_overlap_test      = yes 
snuggle_link_overlap_tolerance = 2p

snuggle_refine                 = yes

</plot>

7.1 snuggling 参数

若要帮助排列标签,以便占用较少的空间,可以使用标签贴合。max_snuggle_distance 可以控制标签在角度方向上移动的距离。

标签会在 max_snuggle_distance 定义的距离之内,每一个 snuggle_sampling 像素进行测试放置位置。

你可以设置 snuggle_tolerance 短路精确放置,该值越大,位置越不精确。

如果标签具有连接线,则可以使用 snuggle_link_overlap_test 测试连接线是否与之前的标签重叠。可以使用 snuggle_link_overlap_tolerance 测试可接受连接程度。

snuggle_refine 参数用于切换对位于相似位置的标签连接线之间的交叉检查。当连接线交叉的标签将被对调。该参数只有当 show_links=yes 才生效。

7.2 标签填充

你可以增加 以使标签布局更加紧凑。也有助于调整标签周围的角度(通过 padding)和径向方向(通过 rpadding)的填充

<plot>
...
padding  = 2p
rpadding = 0.1r

</plot>

通过设置填充值为负数,标签之间的距离会更加紧密。当以相对单位是,径向填充相对于标签宽度,而角度填充相对于标签高度

可以通过试验 max_snuggle_distancepadding 参数的组合,以找到合适你的数据的组合

7.3 均匀放置文本

如果你想均匀放置文本,请不要使用 snuggling

例如,当标签的密度变化时,snuggling 的效果最好。但是,如果你显示的文本是以特定的间隔定义的,你可能希望关闭连接并使用等宽字体

label_font = mono

所有的字体都定义在 etc/fonts.conf 文件中

# etc/fonts.conf

...
mono           = fonts/modern/cmuntt.ttf  # CMUTypewriter-Regular
mono_light     = fonts/modern/cmunbtl.otf # CMUTypewriter-Light

# same as mono and mono_light
fixed          = fonts/modern/cmuntt.ttf  # CMUTypewriter-Regular
fixed_light    = fonts/modern/cmunbtl.otf # CMUTypewriter-Light
...

7.4 调试文本放置

文本绘制可能需要一段时间,特别是标签比较多的情况下,可以在命令行添加 -debug_group text 参数,看看绘制过程都发生了什么

> circos ... -debug_group text
...
debuggroup text 6.45s label layer 2 snuggle seek - STX12 8.0 d 26 label_min_height 42 global_min_height 28
debuggroup text 6.45s label layer 2 snuggle seek + PPP1R8 0.0 d 14 label_min_height 42 global_min_height 28
debuggroup text 6.45s label layer 2 snuggle seek - PPP1R8 0.0 d 14 label_min_height 42 global_min_height 28
...

上面的命令不会监控未放置的文本,可以用 -debug_group textplace 监控哪些标签没有被放置

> circos ... -debug_group textplace
...
debuggroup textplace 23.02s placed hs1 40858938 40903911 RIMS3
debuggroup textplace 23.02s placed hs1 29346951 29380948 SFRS4
debuggroup textplace 23.03s not_placed hs1 1466916 1500125 SSU72
debuggroup textplace 23.03s placed hs1 27972280 28023550 STX12
debuggroup textplace 23.03s placed hs1 40079314 40121764 TRIT1
...
image.png

8. 文本—Rules

可以为每个文本指定规则,规则的使用与前面的教程类似

我们将在图像上绘制一些序列并为碱基对着色,并使用等宽字体

label_font = mono

在此示例中将使用两个数据文件 data/6/sequence.txt

# sequence.txt
...
hs1 2 2 C
hs1 3 3 A
hs1 4 4 A
...

data/6/sequence.long.txt

# sequence.long.txt
...
hs1 1 1 A
hs1 1 1 C
hs1 1 1 A
hs1 1 1 G
hs1 2 2 T
hs1 2 2 A
hs1 2 2 C
hs1 2 2 T
...

8.1 应用文本规则

我们将规则保存在一个独立的文件中,保证主配置文件的简洁,同时也使规则能够复用。

<plots>

# default values for all <plot> blocks
type       = text
color      = black
label_font = mono
label_size = 32
# radial padding
rpadding   = 0.2r

<plot>

file       = data/6/sequence.txt
r1         = 0.9r
r0         = 0.3r
label_size = 16
# angular padding
padding    = -0.25r 

<rules>
<<include rule.textcolor.conf>>
</rules>

</plot>

</plots>

rule.textcolor.conf 文件

condition = var(value) eq "A"
color     = red
</rule>
<rule>

condition = var(value) eq "T"
color     = blue
</rule>
<rule>

condition = var(value) eq "C"
color     = green
</rule>

使用 var(value) 引用文本标签,条件检查文本是 AT 还是 C,并设置不同的颜色。默认的轨迹颜色是标签 G

8.2 调整文本大小

可以使用规则来调整文本字符的任何属性。例如,可以通过设置 label_size 来调整标签中字母的大小

<rule>
# If the text is not A, then hide it. When this rule triggers,
# other rules are not evaluated.
condition  = var(value) ne "A"
show       = no
</rule>

# This rule is applied to any text that didn't pass the previous
# rule (i.e. only A). The label is set to a random value between
# 12 and 48. The rand() function returns a uniformly sampled
# random value in the interval [0,1).

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

推荐阅读更多精彩内容