联系我们
 分类: 文献解读

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();

最终绘图效果如下图:

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

 

如果您对这个绘图还有其他问题,欢迎点击下方按钮联系我们,我们将免费为您设计文章思路方案。

 

 

最近文章