2D 数据绘制(二)
3. 直方图
circos
直方图是折线线图的变形,在折线图中,相邻点用一条直线连接起来,而直方图中,点之间构成一条阶梯状的轨迹。
设置参数 type=histogram
,绘制直方图
在折线图和散点图中,数据点位于跨度的中间。因此通过如下定义一个数据点
hs1 1000 2000 0.5
该点将会绘制在 1500
的位置处。如果你的数据值与特定的位置相关,需要将起始和终止位置设置为同一个值。
hs1 1500 1500 0.5
但是,在直方图中,整个 1000-2000
范围将会对应一个值为 0.5
的直方图的 bin
(直方图的一个柱子)
3.1 扩展 bins
如果设置 extend_bin=yes
,则每个 bin
的左右边界将会延伸到该 bin
与相邻 bin
的中间点。
该值是默认设置的。例如,你的数据是
hs1 1000 2000 0.5
hs1 5000 5500 0.25
hs1 9000 9250 0.75
如果设置了 extend_bin=yes
,中间的 bin
5000-5500
将其左侧扩展到 avg(2000,5000)=3500
,右侧将会扩展到avg(5500,9000)=7250
。
因此,即使数据跨度不是连续的,但是直方图在这三个 bins
之间也是连续的。
如果 extend_bin=no
,则直方图将有三个分离的 bin
。
你有时可能会注意到,即使设置了 extend_bin=no
,相邻的 bin
(起始终止之间的距离在 1bp
内)也会连接起来。这将使得 extend_bin=no
有助于区分没有数据的区域
如果你的数据非常密集,直方图会变得非常拥挤且难以理解。因此,当相邻数据点之间的角度距离至少跨越几个像素时,直方图和折线图才最有用
直方图类型对于跨度上的浮点值有效,对单基因数据点效果更差,如果数据非常密集,建议使用折线图。
3.2 跳过数据点
你可以使用 Perl
的取模运算符(%)
编写一个跳过某些数据点的规则。如果数据点的起点/终点坐标是每 250kb
一个,但只希望每 1Mb
绘制一个点,则可以设置如下规则
<rule>
condition = var(start) % 1Mb
show = no
</rule>
判断条件是每个 bin
的起始值(250kb、500kb、750kb...)
除以 1Mb
后的余数。如果 start
是 1Mb
的倍数,余数为 0
,规则失败
但是,如果 start
不是 1Mb
的倍数,则余数为正数,规则将对该点应用 show=no
,从而隐藏该点。
3.3 处理抽样率
无论你创建的是位图还是 SVG
图像,你是无法在图像上绘制超过给定图像大小能够解析的数据量。
例如,你的 ideogram
半径为 1000
像素,则其周长为 6000
像素。因此,你只有 6000
个可分辨的数据位置。
如果考虑使用抗锯齿技术实现亚像素采样,则最多只能有 12000
个位置。
circos
会一次读取所有的数据,并存储在内存中。为了避免读取所有数据,可以使用 skip_run
和 min_value_change
参数。
如果设置了 skip_run
参数,circos
将只能读取具有相同值的连续数据点的第一个。如
<plot>
skip_run = yes
...
</plot>
# data input
chr1 100 200 0.25 # read in
chr1 200 300 0.1 # read in
chr1 300 400 0.1 # not read in
chr1 400 500 0.1 # not read in
chr1 500 600 0.1 # not read in
chr1 600 700 0.3 # read in
min_value_change
参数的工作原理类似,要求第 n
个读入的值必须与第 n-1
个被读入的值之间的差值至少 min_value_change
才会被读入。如
<plot>
min_value_change = 5
...
</plot>
# data input
chr1 100 200 1 # read in
chr1 200 300 2 # not read in (difference = 1 < 5)
chr1 300 400 5 # not read in (difference = 4 < 5)
chr1 400 500 6 # read in (difference = 5 >= 5)
chr1 500 600 3 # not read in (difference = 3 < 5)
chr1 600 700 13 # read in (difference = 7 >= 5)
chr1
即使这些原始数据采样方法是可用的,但是强烈建议自己先对数据进行过滤,再作为输入数据
3.4 设置轴范围
如果未使用 min/max
指定轴范围,则将缩放轴以跨越整个数据范围,可以显示设置轴范围。例如
min=-1
max=0
将有效隐藏此范围之外的任何值
3.5 隐藏值
你可以通过设置轴范围来裁剪数据值,如果你的数据在 [-1,1]
范围内,并设置了
min=0
max=1
则只显示子范围 [0,1]
中的数据。但是,如果希望保留原始轴范围,并禁止显示数据范围,则你应使用 rule
。
下面的规则将隐藏负值数据
<rules>
<rule>
condition = var(value) < 0
show = no
</rule>
</rules>
3.6 轴方向
默认情况下,y
轴的方向是向外的。这意味着较小的值比较大的值更接近更接近圆的中心。对于直方图,正值的 bin
指向外部,负值的 bin
指向内部。
你可以使用 orientation
设置调整 y
轴的方向,使 y
轴指向内部
orientation = in
其效果与在所有数据值上翻转正负号相同
3.7 填充直方图
使用颜色填充直方图
fill_color = red
通过将两个直方图组合在一起(每个分别用于负值和正值数据)并使用不同颜色,可以实现视觉上的吸引力
3.8 填充扩展 bin
扩展的 bin
会根据原始 bin
设置的格式填充和描边。