Circos图是在基因组相关的分析结果展示中非常常见的一类图型。由于Circos图中展示的信息量大,图形十分美观,很多文章中都会绘制类似的图形。从图形的内容来看,Circos图实际是将多个类型的图片,包括散点图、直方图、折线图、热图等,经过变形以后叠加显示在染色体上。本质上是多个图形的组合。

在R语言中,RCircos这个软件包可以实现快速生成Circos图片。接下来,我们就来看看怎样用R来绘制圈图。

1、基础绘图

# 加载RCicos,如果第一次使用,需要先安装 install.packages('RCircos')# 读取R包 library(RCircos)# 导入内建人类染色体数据 data(UCSC.HG38.Human.CytoBandIdeogram)

# 数据内容如上图;第一列 染色体编号;第二列 染色体片段起始位点;第三列 染色体片段结束位点;第四列 染色体片段编号;第五列 染色体片段颜色
# 这个数据是RCicos内置的人类染色体信息,第四列和第五列信息用于展示染色体的核型。可以省略。

# 设置染色体数据 cyto.info <- UCSC。HG38.Human。CytoBandIdeogram

RCircos.Set.Core.Components(cyto.info, chr.exclude=NULL,tracks.inside=10, tracks.outside=0 )
# chr。exclude=NULL;  设置不显示的染色体,如 c(1,3)          
# tracks。inside=10;  设置内部环形个数
# tracks.outside=0;   设置外部环形个数  

# 绘制染色体图形,默认方法显示染色体名称。 RCircos.Set.Plot.Area()      RCircos.Chromosome.Ideogram。Plot() 

这样仅包含染色体的圈图就生成了:

2、绘制包含数据的图形

# 导入内建人类染色体数据 data(UCSC.HG19.Human.CytoBandIdeogram); #设置不显示的染色体,如 c(1,3)    chr.exclude <- NULL#设置染色体数据 cyto.info <- UCSC.HG19.Human.CytoBandIdeogram;  #设置内部环形个数 tracks.inside <- 10#设置外部环形个数 tracks.outside <- 0# 导入上面四个基本参数 RCircos.Set.Core.Components(cyto.info, chr.exclude, tracks.inside, tracks.outside); # 列出所有绘图参数 RCircos.List.Plot.Parameters() # 定义要生成的图像文件 pdf(file="RCircosDemoHumanGenome", height=8, width=8, compress=TRUE); RCircos.Set.Plot.Area(); # height和width指定生成图片的长和宽,compress指定生成的图片是否需要压缩 # 绘制染色体图形 RCircos.Chromosome.Ideogram.Plot();

3、染色体上添加基因名称与连线

# 加载内置的RCircos.Gene.Label.Data数据集

data(RCircos。Gene。Label.Data);

 

# 数据内容如上图,第一列 染色体编号,需要与第一步导入的染色体数据一致;第二列 基因在染色体片段起始位点;第三列 基因在染色体片段结束位点;第四列 基因名

# 指定内容在内侧的环形还是外侧的环形生成 side <- "in";# 指定内容在第几个环形生成 track。num <- 1;# 绘图 RCircos.Gene.Connector。Plot(RCircos.Gene。Label.Datatrack.numside); # 在染色体上添加基因名称, 指定内容在第几个环形生成 name.col <- 4;# 指定基因名在数据的第几列 track。num <- 2;# 绘图 RCircos。Gene。Name。Plot(RCircos。Gene。Label.Dataname.col,track。numside);

4、添加热图类型的环形

# 加载内置的RCircos。Heatmap.Data数据集
data(RCircos.Heatmap。Data);

# 这个数据集中是6个不同样本的基因表达量数据,数据内容如上图,第一列 染色体编号,需要与第一步导入的染色体数据一致;第二列 基因在染色体片段起始位点;第三列 基因在染色体片段结束位点;第四列 基因名;第五列及以后 基因在不同样本中的表达量

# 指定以第6列数据生成热图 data.col <- 6; # 指定内容在第5个环形生成 track.num <- 5;# 指定内容在内侧的环形生成 side <- "in";# 绘图 RCircos.Heatmap。Plot(RCircos.Heatmap.Datadata。coltrack。numside);

5、添加散点图类型的环形

# 加载内置的RCircos.Scatter.Data数据集
data(RCircos.Scatter.Data);

# 这个数据集是拷贝数变异的数据,数据内容如上图,第一列 染色体编号,需要与第一步导入的染色体数据一致;第二列 突变位点在染色体片段起始位点;第三列 突变位点在染色体片段结束位点;第四列 突变位点拷贝数;第五列 突变平均置信度

# 指定以第5列数据图形中散点纵坐标 data。col <- 5;# 指定图形在第6个环形生成 track.num <- 6;# 指定图形在内侧环形生成 side <- "in";# 指定数据大于1的点以红色显示,小于数据1的点以蓝色显示 by.fold <- 1;# 绘图 RCircos.Scatter。Plot(RCircos.Scatter.Datadata.col,track。numsideby.fold);

6、添加折线图类型的环形

# 加载内置的RCircos。Line.Data数据集
data(RCircos.Line。Data);

# 由于这个数据集的染色体编号与第一步导入的染色体数据不一致,需要在编号前添加chr
RCircos.Line.Data$chromosome <- paste(‘chr’,RCircos.Line.Data$chromosome,sep = )

# 指定以第5列数据做为图形中拆线的纵坐标 data.col <- 5;# 指定图形在第7个环形生成 track。num <- 7;# 指定图形在内侧环形生成 side <- "in";# 绘图 RCircos。Line.Plot(RCircos。Line.Datadata。coltrack.numside);

7、添加直方图类型的环形

# 加载内置的RCircos.Histogram。Data数据集 data(RCircos.Histogram.Data);

# 这个数据集是染色体片段突变频率的数据,数据内容如上图,第一列 染色体编号;第二列 染色体片段起始位点;第三列 染色体片段结束位点;第四列 染色体片段突变频率

# 指定以第4列数据做为图形中直方的纵坐标 data.col <- 4;# 指定图形在第8个环形生成 track.num <- 8;# 指定图形在内侧环形生成 side <- "in";# 绘图 RCircos。Histogram。Plot(RCircos.Histogram.Datadata。coltrack。numside);

8、添加网络图类型的环形

# 加载内置的RCircos.Tile.Data数据集 data(RCircos.Tile.Data);

# 数据内容如上图,第一列 染色体编号;第二列 需要绘制的网格在染色体片段的起始位点;第三列 需要绘制的网格在染色体片段的结束位点

# 指定图形在第9个环形生成 track.num <- 9;# 指定图形在内侧环形生成 side <- "in";# 绘图 RCircos.Tile.Plot(RCircos。Tile。Datatrack。numside);

9、添加一个或多个基因间的联系曲线

# 加载内置的RCircos。Link.Data数据集 data(RCircos.Link。Data);

# 数据内容如上图,第一列 染色体编号;第二列 联系位点在染色体片段的起始位点;第三列 联系位点在染色体片段的结束位点;第四列 联系位点在所在的另一个染色体编号;第五列 联系位点在所在的另一个染色体片段的起始位点;第六列 联系位点在所在的另一个染色体片段的结束位点

# 指定图形在第11个环形生成 track.num <- 11;# 绘图 RCircos.Link.Plot(RCircos。Link.Datatrack.numTRUE);

# 加载内置的RCircos。Ribbon。Data数据集 data(RCircos.Ribbon。Data);

# 绘图 RCircos.Ribbon.Plot(ribbon.data=RCircos.Ribbon.Data, track.num=11by.chromosome=FALSE, twist=FALSE); # 绘图完成之后关闭图形设备,保存图片。可以在工作目录下找到生成的图片,默认是PDF格式  dev.off();

最终绘图效果如下图:

以上就是一个使用数据生成多个环形组合图的过程。我们还可以根据自己的需要添加更多的类似图形。只需要保证数据的结构一致即可。同样,也可以以上面的代码为模板,把其它数据代换进去生成全新图片。

 

最近文章
江苏快三 江苏快3 江苏快三 江苏快3 江苏快三 江苏快三 江苏快3 江苏快三 江苏快三 江苏快3