参考:
1.Package ‘RCircos’
2.Using the RCircos Package
RCircos包可以将基因组结构,以及不同位置的相互关系进行可视化。用RCircos画图的第一步就是先指定RCircos的核心部分,也就是基因组。构建这个核心部分,你可以load基因组构象图到R里。RCircos包自身包含了三个datasets,分别是human,mouse和rat的基因组构象,可以直接使用,用data()
命令。如果你使用的是其它物种的基因组,也可以用read.table()
来读取。
> library(RCircos)
> data(UCSC.HG19.Human.CytoBandIdeogram)
> head(UCSC.HG19.Human.CytoBandIdeogram)
> head(UCSC.HG19.Human.CytoBandIdeogram)
Chromosome ChromStart ChromEnd Band Stain
1 chr1 0 2300000 p36.33 gneg
2 chr1 2300000 5400000 p36.32 gpos25
3 chr1 5400000 7200000 p36.31 gneg
4 chr1 7200000 9200000 p36.23 gpos25
5 chr1 9200000 12700000 p36.22 gneg
6 chr1 12700000 16200000 p36.21 gpos50
画基因组
基因组数据加载后,RCircos核心组分就可以画了,使用RCircos.Set.Core.Components()
函数:
#Setup core components先画基因组的骨架(也就是24条染色体构成的圆圈)
> RCircos.Set.Core.Components(UCSC.HG19.Human.CytoBandIdeogram,#这是上面load的基因组文件
chr.exclude<- NULL, #这个参数是要排除的染色体,这里我选无,也就是画出所有的染色体,你也可以排除x和Y染色体
tracks.inside=10, #这一个参数是指定在染色体圆圈内部一共要画几个圆圈
tracks.outside=0)#这个参数指定在外部画几个圆圈
> RCircos.Set.Plot.Area()#建立一个画板
> RCircos.Chromosome.Ideogram.Plot()#在当前的画板上画基因组的圆圈骨架
画出来的骨架是这样的(我这是截图的,所以像素不高,如果想有高清晰图像可以保存为pdf格式或者其他图片格式):
核心部分被储存在RCircos session里,你可以用RCircos.List.Parameters()
函数查看当前图的参数:
> rcircos.params <- RCircos.Get.Plot.Parameters()
> rcircos.params #一共有32个参数,这里列出了所有参数以及默认值
$base.per.unit
[1] 30000
......
$max.layers
[1] 5
$sub.tracks
[1] 5
$text.color
[1] "black"
$hist.color
[1] "red"
$line.color
[1] "black"
$scatter.color
[1] "black"
$tile.color
[1] "black"
$track.background
[1] "wheat"
$grid.line.color
[1] "gray"
$heatmap.color
[1] "BlueWhiteRed"
$point.type
[1] "."
比如说我想修改一会儿我想画的Line plot的线条颜色,可以修改上面的参数值:
> rcircos.params$line.color <- "purple" #默认黑色,我改成紫色
> RCircos.Reset.Plot.Parameters(rcircos.params)
> RCircos.List.Plot.Parameters()
Parameters for current RCircos session.
Parameters in inch:
==============================
radius.len: 1.84
chr.ideo.pos: 1.94
highlight.pos: 2.09
chr.name.pos: 2.14
plot.radius: 2.64
track.in.start: 1.89
track.out.start: 2.49
chrom.width: 0.1
track.padding: 0.02
track.height: 0.1
Parameters in chromosome unit:
==============================
base.per.unit: 30000
chrom.paddings: 300
heatmap.width: 100
hist.width: 100
gene name char. width: 500
General R graphic parameters:
==============================
text.size: 0.4
highlight.width: 2
point.type: .
point.size: 1
text.color: black
heatmap.color: BlueWhiteRed
hist.color: red
line.color: purple
scatter.color: black
tile.color: black
track.background: wheat
grid.line.color: gray
Bezier.point: 1000
max.layers: 5
sub.tracks: 5
Data track numbers:
==============================
tracks.inside: 10
tracks.outside: 0
Following are procedures to change RCircos plot parameters:
params <- RCircos.Get.Plot.Parameters();
params$radius.len <- 2.0;
params$base.per.unit <- 5000;
RCircos.Reset.Plot.Parameters(params)
Chromosome ideogram data were automatically modified.
标记基因名
在画好整体的骨架之后,就可以往里填东西了。按照官方的教程走一遍流程,首先我们可以在基因组上添加基因名。但是由于图片的清晰度问题,我们没办法把几万个基因都加上去,为了更好的可视化,cex不应该超过0.4,当cex设置为0.4的时候,字体的宽度就占据了5000染色体的unit(每个unit覆盖了3000bp)。当基因列表过长的时候,会自动的去掉一些基因来匹配染色体的长度。另外当一个基因名称太长,可能会占据多于一个track的宽度(track就是一个圆圈),所以可能需要跳过下一个track。connector(连接基因名称的小线段)通常被用来标记某个基因在染色体的哪个位置。目前,RCircos只提供基因与染色体位置之间的connector,下面的代码就是在染色体骨架内的第一圈标出要标记的基因对应的connector:
> data(RCircos.Gene.Label.Data) #用RCircos包里自带的基因列表来画图
> head(RCircos.Gene.Label.Data)
Chromosome chromStart chromEnd Gene
1 chr1 8921418 8934967 ENO1
2 chr1 17345375 17380514 SDHB
3 chr1 27022894 27107247 ARID1A
4 chr1 41976121 42501596 HIVEP3
5 chr1 43803519 43818443 MPL
6 chr1 45794977 45805926 MUTYH
> data(RCircos.Gene.Label.Data)
> name.col <- 4 #数据是4列
> side <- "in" #画在基因组骨架的内侧
> track.num <- 1 #基因组骨架内侧的第一个track位置上画图
> RCircos.Gene.Connector.Plot(RCircos.Gene.Label.Data,
+ track.num, side)#画connector(连接基因名称和基因组位置)
> track.num <- 2
> RCircos.Gene.Name.Plot(RCircos.Gene.Label.Data,
+ name.col,track.num, side)#加基因名称
现在加了基因名称的图就长这样:
添加热图/散点图/线图等
添加其他图形的时候,要求输入文件的前三列是基因组位置信息,一般是染色体名称、起始位点、结束位点。RCircos给各个类型的图都提供了函数功能。
(一)添加热图
> data(RCircos.Heatmap.Data)#加载包里自带的数据
> head(RCircos.Heatmap.Data)
Chromosome chromStart chromEnd GeneName X786.O A498 A549.ATCC
1 chr1 934341 935552 HES4 6.75781 7.38773 6.47890
2 chr1 948846 949919 ISG15 7.56297 10.49590 5.89893
3 chr1 1138887 1142089 TNFRSF18 4.69775 4.55593 4.38970
4 chr1 1270657 1284492 DVL1 7.76886 7.52194 6.87125
5 chr1 1288070 1293915 MXRA8 4.49805 4.72032 4.62207
6 chr1 1592938 1624243 SLC35E2B 8.73104 8.10229 8.36599
ACHN BT.549 CAKI.1
1 6.05517 8.85062 7.00307
2 7.58095 12.08470 7.81459
3 4.50064 4.47525 4.47721
4 7.03517 7.65386 7.69733
5 4.58575 5.66389 4.93499
6 9.04116 9.24175 9.89727
> data.col <- 6
> track.num <- 5 #以防上一步标记的基因名太长,所以这个热图画在基因组内的第5个圈
> side <- "in"
> RCircos.Heatmap.Plot(RCircos.Heatmap.Data, data.col,
+ track.num, side)
(二)加散点图
> data(RCircos.Scatter.Data)
> head(RCircos.Scatter.Data)
chromosome start stop num.mark seg.mean
1 chr1 61735 228706 18 -0.4459
2 chr1 228729 356443 10 0.5624
3 chr1 356542 564621 4 -0.9035
4 chr1 603590 1704138 227 0.3545
5 chr1 1709023 1711414 6 1.2565
6 chr1 1714558 12862252 6276 0.4027
> data.col <- 5 #scatter.Data表格有5列
> track.num <- 6 #从圆圈最外面数,这一层是第6层
> side <- "in"
> by.fold <- 1 #0或者正数,如果大于这个数,就标记成红色;如果小于这个数,标记为蓝色;否则标记为黑色
> RCircos.Scatter.Plot(RCircos.Scatter.Data, data.col,
+ track.num, side, by.fold)
(三)加线图
#这里我用了一个病人的segment文件来画线图,这个文件是之前分析CNV数据得到的
> head(sample)
Chromosome Start End Num_Probes Segment_Mean
1 chr1 3301765 45555044 22823 -0.0412
2 chr1 45555884 45555958 2 -2.1898
3 chr1 45561065 114571841 41867 -0.0540
4 chr1 114581540 117173654 1772 -0.4083
5 chr1 117176111 117176157 2 -1.7948
6 chr1 117176175 146716041 1645 -0.3947
> data.col <- 5
> track.num <- 7
> side <- "in"
> RCircos.Line.Plot(sample, data.col,
+ track.num, side)
(四)加柱形图
> data(RCircos.Histogram.Data)
> head(RCircos.Histogram.Data)
Chromosome chromStart chromEnd Data
1 chr1 45000000 49999999 0.070859
2 chr1 55000000 59999999 0.300460
3 chr1 60000000 64999999 0.125421
4 chr1 70000000 74999999 0.158156
5 chr1 75000000 79999999 0.163540
6 chr1 80000000 84999999 0.342921
> data.col <- 4
> track.num <- 8
> side <- "in"
> RCircos.Histogram.Plot(RCircos.Histogram.Data,
+ data.col, track.num, side)
(五)加连线
#这一步是加两个短距离基因组位置的连线
> data(RCircos.Link.Data)
> head(RCircos.Link.Data)
Chromosome chromStart chromEnd Chromosome.1 chromStart.1 chromEnd.1
1 chr1 8284703 8285399 chr1 8285752 8286389
2 chr1 85980143 85980624 chr7 123161313 123161687
3 chr1 118069850 118070319 chr1 118070329 118070689
4 chr1 167077258 167077658 chr1 169764630 169764965
5 chr1 171671272 171671550 chr1 179790879 179791292
6 chr1 174333479 174333875 chr6 101861516 101861840
> track.num <- 9
> RCircos.Link.Plot(RCircos.Link.Data, track.num, TRUE)
#这一步是加两个长距离的连线,比如chr5和chr13的粗线
> data(RCircos.Ribbon.Data)
> head(RCircos.Ribbon.Data)
chromA chromStartA chromEndA chromB chromStartB chromEndB
1 chr1 28000000 84900000 chr18 19000000 56200000
2 chr1 214500000 236600000 chr10 3800000 17300000
3 chr5 62900000 104500000 chr13 79000000 104800000
4 chr8 73900000 139900000 chr17 0 22200000
> track.num <- 9
> side <- "in"
> RCircos.Ribbon.Plot(ribbon.data=RCircos.Ribbon.Data,
+ track.num, by.chromosome=FALSE, twist=FALSE)