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数据集
# 数据内容如上图,第一列 染色体编号,需要与第一步导入的染色体数据一致;第二列 基因在染色体片段起始位点;第三列 基因在染色体片段结束位点;第四列 基因名
# 指定内容在内侧的环形还是外侧的环形生成
side <- "in";
# 指定内容在第几个环形生成
track.num <- 1;
# 绘图
RCircos.Gene.Connector.Plot(RCircos.Gene.Label.Data, track.num, side);
# 在染色体上添加基因名称, 指定内容在第几个环形生成
name.col <- 4;
# 指定基因名在数据的第几列
track.num <- 2;
# 绘图
RCircos.Gene.Name.Plot(RCircos.Gene.Label.Data, name.col,track.num, side);
4、添加热图类型的环形
data(RCircos.Heatmap.Data);
# 这个数据集中是6个不同样本的基因表达量数据,数据内容如上图,第一列 染色体编号,需要与第一步导入的染色体数据一致;第二列 基因在染色体片段起始位点;第三列 基因在染色体片段结束位点;第四列 基因名;第五列及以后 基因在不同样本中的表达量
# 指定以第6列数据生成热图
data.col <- 6;
# 指定内容在第5个环形生成
track.num <- 5;
# 指定内容在内侧的环形生成
side <- "in";
# 绘图
RCircos.Heatmap.Plot(RCircos.Heatmap.Data, data.col, track.num, side);
5、添加散点图类型的环形
data(RCircos.Scatter.Data);
# 这个数据集是拷贝数变异的数据,数据内容如上图,第一列 染色体编号,需要与第一步导入的染色体数据一致;第二列 突变位点在染色体片段起始位点;第三列 突变位点在染色体片段结束位点;第四列 突变位点拷贝数;第五列 突变平均置信度
# 指定以第5列数据图形中散点纵坐标
data.col <- 5;
# 指定图形在第6个环形生成
track.num <- 6;
# 指定图形在内侧环形生成
side <- "in";
# 指定数据大于1的点以红色显示,小于数据1的点以蓝色显示
by.fold <- 1;
# 绘图
RCircos.Scatter.Plot(RCircos.Scatter.Data, data.col,track.num, side, by.fold);
6、添加折线图类型的环形
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.Data, data.col, track.num, side);
7、添加直方图类型的环形
# 加载内置的RCircos.Histogram.Data数据集
data(RCircos.Histogram.Data);
# 这个数据集是染色体片段突变频率的数据,数据内容如上图,第一列 染色体编号;第二列 染色体片段起始位点;第三列 染色体片段结束位点;第四列 染色体片段突变频率
# 指定以第4列数据做为图形中直方的纵坐标
data.col <- 4;
# 指定图形在第8个环形生成
track.num <- 8;
# 指定图形在内侧环形生成
side <- "in";
# 绘图
RCircos.Histogram.Plot(RCircos.Histogram.Data, data.col, track.num, side);
8、添加网络图类型的环形
# 加载内置的RCircos.Tile.Data数据集
data(RCircos.Tile.Data);
# 数据内容如上图,第一列 染色体编号;第二列 需要绘制的网格在染色体片段的起始位点;第三列 需要绘制的网格在染色体片段的结束位点
# 指定图形在第9个环形生成
track.num <- 9;
# 指定图形在内侧环形生成
side <- "in";
# 绘图
RCircos.Tile.Plot(RCircos.Tile.Data, track.num, side);
9、添加一个或多个基因间的联系曲线
# 加载内置的RCircos.Link.Data数据集
data(RCircos.Link.Data);
# 数据内容如上图,第一列 染色体编号;第二列 联系位点在染色体片段的起始位点;第三列 联系位点在染色体片段的结束位点;第四列 联系位点在所在的另一个染色体编号;第五列 联系位点在所在的另一个染色体片段的起始位点;第六列 联系位点在所在的另一个染色体片段的结束位点
# 指定图形在第11个环形生成
track.num <- 11;
# 绘图
RCircos.Link.Plot(RCircos.Link.Data, track.num, TRUE);
# 加载内置的RCircos.Ribbon.Data数据集
data(RCircos.Ribbon.Data);
# 绘图
RCircos.Ribbon.Plot(ribbon.data=RCircos.Ribbon.Data, track.num=11, by.chromosome=FALSE, twist=FALSE);
# 绘图完成之后关闭图形设备,保存图片。可以在工作目录下找到生成的图片,默认是PDF格式
dev.off();
最终绘图效果如下图:
以上就是一个使用数据生成多个环形组合图的过程。我们还可以根据自己的需要添加更多的类似图形。只需要保证数据的结构一致即可。同样,也可以以上面的代码为模板,把其它数据代换进去生成全新图片。
如果您对这个绘图还有其他问题,欢迎点击下方按钮联系我们,我们将免费为您设计文章思路方案。