画圈?RCircos满足你的想象!

2022-03-29 08:38:14 浏览数 (1)

导语

GUIDE ╲

一个典型的Circos图最外圈一般是染色体的示意图,上面的刻度表示染色体的坐标位置,然后在内部加入不同的注释信息。

背景介绍

circos图对于一些数据量较大,不方便使用常用柱状图或者箱型图表示的数据能够进行漂亮的可视化,尤其常用于基因组可视化,并且可以进行基因组不同位置关系的展示,小编今天介绍的R包RCircos,就是在R语言中最常用的circos图绘制工具,可以通过十分简单的代码绘制美观的图形!

目前,RCircos可以绘制以下图形:人类、小鼠和大鼠的染色体表意图图,热图、直方图、线、散点图等,用于表示关系的链接等。

R包安装

代码语言:javascript复制
BiocManager::install("RCircos")
library(Rcircos)

可视化介绍

01

输入数据格式

RCircos以数据框的形式获取输入数据,该数据框可以是从read.table()读取的,也可以是由当前R session中生成的对象。数据框的前三列,除了链接图的输入外,必须是按染色体名称、染色体起始位置和染色体结束位置的顺序排列的基因组位置信息。

代码语言:javascript复制
data(RCircos.Histogram.Data)
head(RCircos.Histogram.Data)

对于基因标签和热图,第四列必须提供基因/探针名称。

代码语言:javascript复制
data(RCircos.Heatmap.Data)
head(RCircos.Heatmap.Data)

与其他图数据不同的是,连接线图的输入数据只有每一行按染色体名称A,染色体名称A,染色体名称A,染色体名称B,染色体名称B的顺序配对的基因组位置信息。

代码语言:javascript复制
data(RCircos.Link.Data)
head(RCircos.Link.Data)

02

轨道布局的绘制

RCircos轨迹可以放置在染色体表意文字的内部或外部,并且可以通过改变轨迹宽度和轨迹编号轻松地操纵轨迹的详细位置。

下图显示了一个人类染色体表意文字加上三个空轨道排列在染色体表意文字的内部和外部。

03

绘图实践

首先初始化RCircos核心组件

RCircos软件包有三个内置的人类、小鼠和大鼠染色体的数据集,可以通过data()命令加载。

代码语言:javascript复制
data(UCSC.HG19.Human.CytoBandIdeogram)
head(UCSC.HG19.Human.CytoBandIdeogram)

data(UCSC.Mouse.GRCm38.CytoBandIdeogram)
head(UCSC.Mouse.GRCm38.CytoBandIdeogram)

data(UCSC.Baylor.3.4.Rat.cytoBandIdeogram)
head(UCSC.Baylor.3.4.Rat.cytoBandIdeogram)

在加载染色体数据后,可以用RCircos的函数RCircos.Set.Core.Components()初始化。此函数需要四个参数:

cytoinfo:染色体数据

chr.exclude:需要排除在外的染色体

tracks.inside:内部要绘制多少个轨道

tracks.outside:外部要绘制多少个轨道

代码语言:javascript复制
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绘图

用RCircos进行绘图是一个循序渐进的过程。要向初始化的图片中依次添加轨道和其他数据。

我们需要先定义一个pdf文件用来储存图形

代码语言:javascript复制
out.file <- "RCircosDemoHumanGenome.pdf"
pdf(file=out.file, height=8, width=8, compress=TRUE)
RCircos.Set.Plot.Area()

调整图形的打印区域

代码语言:javascript复制
par(mai=c(0.25, 0.25, 0.25, 0.25))
plot.new()
plot.window(c(-2.5,2.5), c(-2.5, 2.5))

Circos图上的基因标签和连接器

代码语言:javascript复制
RCircos.Chromosome.Ideogram.Plot()
data(RCircos.Gene.Label.Data)
name.col <- 4
side <- "in"
track.num <- 1
RCircos.Gene.Connector.Plot(RCircos.Gene.Label.Data,
                                track.num, side)
track.num <- 2
RCircos.Gene.Name.Plot(RCircos.Gene.Label.Data,
                           name.col,track.num, side)

热图、直方图、线图、散点图等的添加

代码语言:javascript复制
data(RCircos.Heatmap.Data)
data.col <- 6
track.num <- 5
side <- "in"
RCircos.Heatmap.Plot(RCircos.Heatmap.Data, data.col,
                         track.num, side)
data(RCircos.Scatter.Data)
data.col <- 5
track.num <- 6
side <- "in"
by.fold <- 1
RCircos.Scatter.Plot(RCircos.Scatter.Data, data.col,
                         track.num, side, by.fold)
data(RCircos.Line.Data)
data.col <- 5
track.num <- 7
side <- "in"
RCircos.Line.Plot(RCircos.Line.Data, data.col,
                      track.num, side)
data(RCircos.Histogram.Data)
data.col <- 4
track.num <- 8
side <- "in"
RCircos.Histogram.Plot(RCircos.Histogram.Data,
                           data.col, track.num, side)
data(RCircos.Tile.Data)
track.num <- 9
side <- "in"
RCircos.Tile.Plot(RCircos.Tile.Data, track.num, side)

链接数据的添加

代码语言:javascript复制
data(RCircos.Link.Data)
track.num <- 11
RCircos.Link.Plot(RCircos.Link.Data, track.num, TRUE)
data(RCircos.Ribbon.Data)
RCircos.Ribbon.Plot(ribbon.data=RCircos.Ribbon.Data,
                        track.num=11, by.chromosome=FALSE, twist=FALSE)
dev.off()

小编总结

在R语言绘制Circos图的工具中,RCircos是非常简单的一种,内部提供基因组数据,我们可以初始化图形以后,根据不同的需要,制作对应的数据格式,向初始化的基因组内部添加丰富的内容!

END

0 人点赞