今天看啥  ›  专栏  ›  名本无名

circos 学习手册(二十九)

名本无名  · 简书  ·  · 2021-01-10 15:14

技巧(四)

13. 拷贝数数据

本节将展示如何绘制拷贝数( CNV )值,例如有如下数据

...
hs1 30200000 32400000 0.798258
hs1 32400000 34600000 0.0495811
hs1 34600000 40100000 -2.46056
hs1 40100000 44100000 1.40846
hs1 44100000 46800000 -2.35913
...

随机生成范围在 [-3,3] 之间的值

13.1 定义散点图

我们需要一个不同的背景来描述 CNV 值的正负,可以用不同的 min/max 参数值来区分

负数值的轨迹将定位在圆半径的 60-75% 处,并显示 [-3,0] 范围内的数据

<plot>
type = scatter
file = data/8/13/data.cnv.txt
r0   = 0.6r
r1   = 0.75r
min  = -3
max  = 0

glyph      = circle
glyph_size = 8
color      = red

<axes>
<axis>
color     = lred
thickness = 2
spacing   = 0.1r
</axis>
</axes>

<backgrounds>
<background>
color = vlred_a5
</background>
</backgrounds>

...

为正值定义如下

<plot>
type = scatter
file = data/8/13/data.cnv.txt
r0   = 0.75r
r1   = 0.9r
min  = 0
max  = 3
glyph = circle
glyph_size = 8
color = green

<axes>
<axis>
color     = lgreen
thickness = 2
spacing   = 0.1r
</axis>
</axes>

<backgrounds>
<background>
color = vlgreen_a5
</background>
</backgrounds>

...

13.2 调整符号大小

在本例中,我们将修改 glyph 的大小和轮廓。大小将与绝对值成比例,对于非常大(或非常小)的值,我们将在 glyph 周围放置一个黑色轮廓

<rules>

# change the glyph_size for each point using formula 6+4*abs(cnv)
<rule>
importance = 100
condition  = 1
glyph_size = eval( 6 + 4*abs(var(value)) )
flow       = continue
</rule>

# if the value is >2, add a black outline
<rule>
importance = 90
condition  = var(value) > 2
stroke_color = black
stroke_thickness = 2
</rule>

</rules>

13.3 从散点图创建热图

你可能希望指出基因组的哪些部分包含正(或负) CNV 值。因为散点图中的点很分散,所以很难立即确定正或负的 CNV 区域

一种方法是绘制热图,但是在这里,我们将演示如何通过将散点图值折叠到单个径向位置来创建类似的轨迹。

通过定义两个以上的类似于上面的散点图,但是 r0=r1 ,这些点将在相同的径向位置绘制,而不管它们的值如何。将根据其值更改颜色的透明度,我们可以得到类似于热图的效果

<plot>
type = scatter
file = data/8/13/data.cnv.txt
r0   = 0.955r
r1   = 0.955r
min  = 0
max  = 3
glyph = square
glyph_size = 8
color = green

<rules>
<rule>
condition  = 1
fill_color = eval( "green_a" . remap_int(var(value),0,3,1,5) )
</rule>
</rules>

</plot>
image.png

14. 有方向的 link

要绘制有方向的 link ,你需要将连接轨迹与另一个轨迹组合

最好的方法是使用带有三角形字形的散点图。该字形将充当 link 末尾的箭头。

要准备数据,需要创建一个散点图数据文件,其中包含链接末端的坐标。例如,

hs1 102024400 102025440 hs3 111883743 111884767
hs1 152617218 152618252 hs3 111883745 111884756
hs1 158502674 158503718 hs3 111883744 111884768

终端为

hs1 102024400 102025440 0
hs1 152617218 152618252 0
hs1 158502674 158503718 0
...

我们将第二个位置定义为终端,并设置 y 值为 0

添加箭头

<plots>

<plot>

type  = scatter
file  = linkends.txt

glyph      = triangle
glyph_size = 24p

min = 0
max = 1
r0  = 0.99r
r1  = 0.99r

fill_color = black

<rules>

<rule>
condition  = 1
fill_color = eval(lc "chr".substr(var(chr),2))
</rule>

</rules>

</plot>

</plots>

将散点图绘制在 radius = 0.99r (正好在链接结束之前)处,以将三角形字形无缝连接到连接线。

你可以使用其他轨道来指示链接的末尾,例如高亮 highlight ,使 link 的底部更粗或文本轨道(为链接的末端命名)

image.png

15. 填充模式

通过设置 pattern 参数,可以使用填充图案绘制色带、热图和直方图

<link>
...
ribbon = yes
pattern = checker
...
</link>

15.1 模式

存在如下填充模式

  • solid
  • hline
  • hline-sparse
  • vline
  • vline-sparse
  • checker
  • checker-sparse
  • dot
  • dot-sparse

和字体一样,模式在它们自己的块中命名,并从另一个配置文件中导入。

定义模式的文件是 etc/patterns.conf 。模式的位图可以在 etc/tiles 中找到

# etc/pattern.conf
vline        = tiles/vlines.png
vline-sparse = tiles/vlines-sparse.png
...

然后可以通过 <<include etc/colors_fonts_patterns.conf>> 导入

15.2 颜色模式

可以使用 color 参数重新映射图案的颜色。预定义的图案是黑白的,但是您可以通过定义 old:new 颜色的列表来重新映射图案的颜色

color = white:red,black:orange

反转黑白图案

color = white:black,black:white

要替换图案中与图像背景颜色不同的所有颜色,请将 color 参数设置为单个单词。例如,在背景为黑色的图像上

color = red

将图案中所有非黑色像素着色为红色

16. 自动化轨迹

如果你要显示大量类似格式的轨迹(例如 20 个直方图),可以使用动态配置变量和计数器自动生成这些轨迹。

这种情况适用于从多个样本(例如 20 个癌症基因组)中创建图像,每个样本都有相同的数据类型(例如 CNV )。

16.1 动态配置变量

为了使用计数器,您需要知道如何在配置文件中按名称引用配置文件参数。

例如,如果有一个名为 myparameter 的配置参数,则需要知道如何在另一个参数中使用它的值。

可以使用 conf() 函数访问配置文件中的任何其他参数的值。例如

param1 = 10
# assigns value of param1 to param2
param2 = conf(param1)

conf() 函数的参数是完整的块路径,以逗号分隔的列表形式传入

<myblock>
param1 = 10
</myblock>

<anotherblock>
param2 = conf(myblock,param1)
</myblock>

conf(myblock1,myblock1a,myblock1aa,param1) 获取最里面块的 param1 参数值

<myblock1>
 <myblock1a>
  <myblock1aa>
   param1 = 10
  </myblock1aa>
 </myblock1a>
</myblock1>

16.2 可评估的配置参数

配置参数可以基于表达式。要将参数值作为表达式求值,需要将参数值放置在 eval()

color = eval("b"."l"."u"."e")

结合使用

<myblock>
 global_color = blue
</myblock>

color = eval(conf(myblock,global_color) . "_a5")

16.3 计数器

自动计数

circos 解析 <plot> <link> <highlight> 块时,你可以通过 counter(TYPE) 访问每个轨迹的索引,其中 TYPE plot link highlight 之一。

给定类型的第一个块的计数器值从 0 开始,递增 1

counter(TYPE) 函数是 conf(counter,TYPE) 的简写。

<plots>

<plot>
# value of counter(plot) = 0
...
</plot>

<plot>
# value of counter(plot) = 1
...
</plot>

<plot>
# value of counter(plot) = 2
...
</plot>

</plots>

<links>

<link>
# value of counter(link) = 0
...
</link>

<link>
# value of counter(link) = 1
...
</link>

<link>
# value of counter(link) = 2
...
</link>

</links>

这些计数器可用于根据轨迹参数在配置文件中的出现顺序动态调整轨迹参数。

这对于堆叠多个轨迹非常有用,您只需定义轨迹宽度和间距以及第一个轨迹的位置,其余轨迹将自动放置

默认情况下,自动计数器增加 1 (请记住,它们的计数从 0 开始)。如果要更改增量,请使用

<plot>
post_increment_counter = 2
...
</plot>

因此

<plots>

<plot>
# counter(plot) = 0
...
post_increment_counter = 2
</plot>

<plot>
# counter(plot) = 2
...
post_increment_counter = 5
</plot>

<plot>
# counter(plot) = 7
...
</plot>

<plot>
# counter(plot) = 14
...
</plot>

</plots>

如果指定 post_increment_counter ,则该值将用于同一 TYPE 的所有其他块,除非您重新定义该值

你也可以将此增量设置为随机值

<plot>
post_increment_counter = eval(1+int(rand(3)))
...
</plot>
自定义计数器

您可以使用以下参数在任何块中设置和更改自定义计数器

  • init_counter = counter_name:value
  • pre_set_counter = counter_name:value
  • post_set_counter = counter_name:value
  • pre_increment_counter = counter_name:value_increment
  • post_increment_counter = counter_name:value_increment

如果省略 counter_name circos 将假定您引用的是块的默认计数器

<plots>

<plot>

# set the value of the counter before this block is parsed
pre_set_counter = mycounter:5

# inside the block
# counter(mycounter) = 5

# set the value after parsing this block
post_set_counter = mycounter:10
...
</plot>

<plot>

# counter(mycounter)=11 before this block is parsed (previous value +1)
pre_increment_counter = mycounter:1

# counter(mycounter) = 11

# set the increment to add to counter after parsing this block
post_increment_counter = mycounter:2
...
</plot>

<plot>

# counter(mycounter) = 13
...

</plot>

...

</plots>

自定义计数器的目的是允许多个计数器。

要初始化计数器值,请使用 init_counter 。这种初始化只会在第一次看到它时发生,如果已经定义了计数器,那么它什么也不做。

要更改已定义的计数器的值,请使用 pre_set_counter post_set_counter

16.4 自动放置和格式化轨迹

让我们创建一个带有 16 个直方图的图形。每个都会自动递增地放置和格式化。

首先,我创建了 16 个不同的随机数据文件 histogram.0.txt ... histogram.15.txt 作为源数据文件

我希望第一条轨道的起始位置为 0.925r ,并且每条轨道的宽度为 0.055r ,基线之间的距离为 0.06 。这些变量在配置文件的根目录中定义

track_width   = 0.055
track_start   = 0.925
track_step    = 0.06

每个轨迹的定义都是相同的,每个参数都是关于自动计数器 counter(plot) 以及自定义计数器 counter(thickness) 的表达式

<plot>
# histogram.0.txt, histogram.1.txt, histogram.2.txt, ...
file    = data/8/16/histogram.counter(plot).txt

# 0.925, 0.925-0.06, 0.0925-2*0.06, ...
r0      = eval(sprintf("%fr",conf(track_start) -
                 counter(plot) * conf(track_step) ))

# 0.925+0.055, 0.925+0.55-0.06, 0.0925+0.55-2*0.06, ...
r1      = eval(sprintf("%fr",conf(track_start) +
                         conf(track_width) - 
                 counter(plot) * conf(track_step)))

# in, out, in, out, ...
orientation = eval( counter(plot) % 2 ? "in" : "out" )

# spectral-11-div-1, spectral-11-div-2, spectral-11-div-3, ...
fill_color  = eval(sprintf("spectral-11-div-%d",counter(plot)%11+1))

# 8, 8, 7, 7, 6, 6, ...
thickness   = eval(max(1,8-int(counter(thickness))))
# 0, 0.5, 1, 1.5, ...
post_increment_counter = thickness:0.5
# vvvlgrey, vvlgrey, vlgrey, ...
background_color = eval((qw(vvvlgrey vvlgrey vlgrey lgrey grey dgrey vdgrey vvdgrey))[counter(plot) % 8])

<rules>
<rule>
condition  = var(value) > 0.25 && var(value) < 0.75
show = no
</rule>
</rules>

</plot>

由于每个 plot 轨迹的定义都是相同的,因此可以方便地将其存储在单独的配置文件(例如 plot.conf )中,并根据需要在主配置文件中包含此块的尽可能多的副本

<plots>
# global settings
...

# multiple plot block definitions
<<include plot.conf>>
<<include plot.conf>>
<<include plot.conf>>
<<include plot.conf>>
...

</plots>



原文地址:访问原文地址
快照地址: 访问文章快照