前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OmicCircos--实现多组学数据的环形可视化!

OmicCircos--实现多组学数据的环形可视化!

作者头像
作图丫
发布2022-03-29 13:46:07
1.4K0
发布2022-03-29 13:46:07
举报
文章被收录于专栏:作图丫

导语

GUIDE ╲

OmicCircos 包可以用于生成高质量的circos图,用于可视化组学数据的变化。

背景介绍

今天小编给大家介绍的是一个在R语言中能够方便快捷地绘制高质量circos图的包--OmicCircos,数据可以是来自突变、拷贝数、表达和甲基化分析的基于基因或染色体位置的值。 该软件包能够显示散点图、线条和文本标签的变化。 该基因组特征之间的关系可以以多边形和曲线的形式呈现。

OmicCircos 还能够从多个样本数据中绘制箱线图、直方图和热图。每个轨道都是独立绘制的,这使得用户可以快速轻松地优化轨道。

R包安装

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

可视化展示

01

数据准备

输入文件格式

包中使用了四个输入数据文件:segment data, mapping data, link data和link polygon data。

绘制基础圆形需要segment data。其余三个数据集用于绘制额外的轨迹。

##segment data

代码语言:javascript
复制
options(stringsAsFactors=FALSE)
library(OmicCircos)
##input hg19 cytogenetic band data
data(UCSC.hg19.chr)
head(UCSC.hg19.chr)

##mapping data

代码语言:javascript
复制
options(stringsAsFactors=FALSE)
##TCGA gene expression data
data(TCGA.BC.gene.exp.2k.60)
head(TCGA.BC.gene.exp.2k.60[,c(1:5)])

##link data

代码语言:javascript
复制
options(stringsAsFactors=FALSE)
##TCGA fusion gene data
data(TCGA.BC.fus)
head(TCGA.BC.fus[,c(1:6)])

02

基础绘图

输入数据集由 extttsim.circos 函数生成

代码语言:javascript
复制
options(stringsAsFactors=FALSE)
library(OmicCircos)
options(stringsAsFactors=FALSE)
set.seed(1234)
#染色体数
seg.num=10
#样本数
ind.num=20
seg.po=c(20:50)
link.num=10#相关对数
link.pg.num=4
##构建数据
sim.out=sim.circos(seg=seg.num,po=seg.po,ind=ind.num,link=link.num,
link.pg=link.pg.num)
##提取构建好的数据
seg.f=sim.out$seg.frame
seg.v=sim.out$seg.mapping
link.v=sim.out$seg.link
link.pg.v=sim.out$seg.link.pg
seg.num=length(unique(seg.f[,1]))

#命名segment(option)
seg.name=paste("chr",1:seg.num,sep="")
db=segAnglePo(seg.f,seg=seg.name)
#设置颜色,设置图形范围
colors=rainbow(seg.num,alpha=0.5)
par(mar=c(2,2,2,2))
plot(c(1,800),c(1,800),type="n",axes=FALSE,xlab="",ylab="",main="")
#绘制外层坐标
circos(R=400,cir=db,type="chr",col=colors,print.chr.lab=TRUE,W=4,scale=TRUE)
##逐层绘制circos
circos(R=360,cir=db,W=40,mapping=seg.v,col.v=3,type="l",B=TRUE,col=colors
[1],lwd=2,scale=TRUE)
circos(R=320,cir=db,W=40,mapping=seg.v,col.v=3,type="ls",B=FALSE,col=colors
[9],lwd=2,scale=TRUE)
circos(R=280,cir=db,W=40,mapping=seg.v,col.v=3,type="lh",B=TRUE,col=colors
[7],lwd=2,scale=TRUE)
circos(R=240,cir=db,W=40,mapping=seg.v,col.v=19,type="ml",B=FALSE,col=colors
,lwd=2,scale=TRUE)
circos(R=200,cir=db,W=40,mapping=seg.v,col.v=19,type="ml2",B=TRUE,col=colors,
lwd=2)
circos(R=160,cir=db,W=40,mapping=seg.v,col.v=19,type="ml3",B=FALSE,cutoff=5,
lwd=2)
circos(R=150,cir=db,W=40,mapping=link.v,type="link",lwd=2,col=colors[c(1,7)])
circos(R=150,cir=db,W=40,mapping=link.pg.v,type="link.pg",lwd=2,col=sample(
colors,link.pg.num))
代码语言:javascript
复制
options(stringsAsFactors=FALSE)
library(OmicCircos)
set.seed(1234)
##输入参数
seg.num=10
ind.num=20
seg.po=c(20:50)
link.num=10
link.pg.num=4
##构建数据
sim.out=sim.circos(seg=seg.num,po=seg.po,ind=ind.num,link=link.num,
link.pg=link.pg.num)
seg.f=sim.out$seg.frame
seg.v=sim.out$seg.mapping
link.v=sim.out$seg.link
link.pg.v=sim.out$seg.link.pg
seg.num=length(unique(seg.f[,1]))

#设置segment名字
seg.name=paste("chr",1:seg.num,sep="")
db=segAnglePo(seg.f,seg=seg.name)

colors=rainbow(seg.num,alpha=0.5)
par(mar=c(2,2,2,2))
plot(c(1,800),c(1,800),type="n",axes=FALSE,xlab="",ylab="",main="")
circos(R=400,type="chr",cir=db,col=colors,print.chr.lab=TRUE,W=4,scale=TRUE)
circos(R=360,cir=db,W=40,mapping=seg.v,col.v=8,type="box",B=TRUE,col=colors
[1],lwd=0.1,scale=TRUE)
circos(R=320,cir=db,W=40,mapping=seg.v,col.v=8,type="hist",B=TRUE,col=colors
[3],lwd=0.1,scale=TRUE)
circos(R=280,cir=db,W=40,mapping=seg.v,col.v=8,type="ms",B=TRUE,col=colors
[7],lwd=0.1,scale=TRUE)
circos(R=240,cir=db,W=40,mapping=seg.v,col.v=3,type="h",B=FALSE,col=colors
[2],lwd=0.1)
circos(R=200,cir=db,W=40,mapping=seg.v,col.v=3,type="s",B=TRUE,col=colors,
lwd=0.1)
circos(R=160,cir=db,W=40,mapping=seg.v,col.v=3,type="b",B=FALSE,col=colors,
lwd=0.1)
circos(R=150,cir=db,W=40,mapping=link.v,type="link",lwd=2,col=colors[c(1,7)])
circos(R=150,cir=db,W=40,mapping=link.pg.v,type="link.pg",lwd=2,col=sample(
colors,link.pg.num))

增加标注

代码语言:javascript
复制
##输入参数
seg.num=10
ind.num=20
seg.po=c(20:50)
link.num=10
link.pg.num=4
##设置数据
sim.out=sim.circos(seg=seg.num,po=seg.po,ind=ind.num,link=link.num,
link.pg=link.pg.num)

seg.f=sim.out$seg.frame
seg.v=sim.out$seg.mapping
link.v=sim.out$seg.link
link.pg.v=sim.out$seg.link.pg
seg.num=length(unique(seg.f[,1]))

##
seg.name=paste("chr",1:seg.num,sep="")
db=segAnglePo(seg.f,seg=seg.name)
colors=rainbow(seg.num,alpha=0.5)
par(mar=c(2,2,2,2))
plot(c(1,800),c(1,800),type="n",axes=FALSE,xlab="",ylab="",main="")
circos(R=400,type="chr",cir=db,col=colors,print.chr.lab=TRUE,W=4,scale=TRUE)
circos(R=360,cir=db,W=40,mapping=seg.v,col.v=8,type="quant90",B=FALSE,col=
colors,lwd=2,scale=TRUE)
circos(R=320,cir=db,W=40,mapping=seg.v,col.v=3,type="sv",B=TRUE,col=colors
[7],scale=TRUE)
circos(R=280,cir=db,W=40,mapping=seg.v,col.v=3,type="ss",B=FALSE,col=colors
[3],scale=TRUE)
circos(R=240,cir=db,W=40,mapping=seg.v,col.v=8,type="heatmap",lwd=3)
circos(R=200,cir=db,W=40,mapping=seg.v,col.v=3,type="s.sd",B=FALSE,col=colors
[4])
circos(R=160,cir=db,W=40,mapping=seg.v,col.v=3,type="ci95",B=TRUE,col=colors
[4],lwd=2)
circos(R=150,cir=db,W=40,mapping=link.v,type="link",lwd=2,col=colors[c(1,7)])
circos(R=150,cir=db,W=40,mapping=link.pg.v,type="link.pg",lwd=2,col=sample(
colors,link.pg.num))
#添加一些标注(强调) 
the.col1=rainbow(10,alpha=0.5)[3]
highlight=c(160,410,6,2,6,10,the.col1,the.col1)
circos(R=110,cir=db,W=40,mapping=highlight,type="hl",lwd=1)

the.col1=rainbow(10,alpha=0.1)[3]
the.col2=rainbow(10,alpha=0.5)[1]
highlight=c(160,410,3,12,3,20,the.col1,the.col2)
circos(R=110,cir=db,W=40,mapping=highlight,type="hl",lwd=2)

03

label设置

设置外部标签

代码语言:javascript
复制
data("TCGA.PAM50genefuhg18")
data("TCGA.BC.fus")
data("TCGA.BC.cnv.2k.60")
data("TCGA.BC.gene.exp.2k.60")
data("TCGA.BC.sample60")
data("TCGA.BCHer2cnvexp")

pvalue=−1*log10(TCGA.BCHer2cnvexp[,5])
pvalue=cbind(TCGA.BCHer2cnvexp[,c(1:3)],pvalue)

Her2.i=which(TCGA.BC.sample60[,2]=="Her2")
Her2.n=TCGA.BC.sample60[Her2.i,1]

Her2.j=which(colnames(TCGA.BC.cnv.2k.60)%in%Her2.n)
cnv=TCGA.BC.cnv.2k.60[,c(1:3,Her2.j)]
cnv.m=cnv[,c(4:ncol(cnv))]
cnv.m[cnv.m>2]=2
cnv.m[cnv.m<−2]=−2
cnv=cbind(cnv[,1:3],cnv.m)

Her2.j=which(colnames(TCGA.BC.gene.exp.2k.60)%in%Her2.n)
gene.exp=TCGA.BC.gene.exp.2k.60[,c(1:3,Her2.j)]
colors=rainbow(10,alpha=0.5)
par(mar=c(2,2,2,2))
plot(c(1,800),c(1,800),type="n",axes=FALSE,xlab="",ylab="")
circos(R=300,type="chr",cir="hg18",print.chr.lab=FALSE,W=4)
circos(R=310,cir="hg18",W=20,mapping=TCGA.PAM50genefuhg18,type="label",6side="out",col=c("black","blue","red"),cex=0.4)
circos(R=250,cir="hg18",W=50,mapping=cnv,col.v=4,type="ml3",B=FALSE,col=
colors[7],cutoff=0,scale=TRUE)
circos(R=200,cir="hg18",W=50,mapping=gene.exp,col.v=4,type="ml3",B=TRUE,col=
colors[3],cutoff=0,scale=TRUE)
circos(R=140,cir="hg18",W=50,mapping=pvalue,col.v=4,type="l",B=FALSE,col=
colors[1],scale=TRUE)
##设置fusion gene colors
cols=rep(colors[7],nrow(TCGA.BC.fus))
col.i=which(TCGA.BC.fus[,1]==TCGA.BC.fus[,4])
cols[col.i]=colors[1]
circos(R=132,cir="hg18",W=50,mapping=TCGA.BC.fus,type="link",col=cols,lwd=2)

设置内部标签

代码语言:javascript
复制
par(mar=c(2,2,2,2))
plot(c(1,800),c(1,800),type="n",axes=FALSE,xlab="",ylab="",main="")
circos(R=300,type="chr",cir="hg18",col=TRUE,print.chr.lab=FALSE,W=4)
circos(R=290,cir="hg18",W=20,mapping=TCGA.PAM50genefuhg18,type="label",side="
in",col=c("black","blue"),cex=0.4)
circos(R=310,cir="hg18",W=50,mapping=cnv,col.v=4,type="ml3",B=TRUE,col=colors
[7],cutoff=0,scale=TRUE)

04

结合热图

代码语言:javascript
复制
data("TCGA.PAM50genefuhg18")
data("TCGA.BC.fus")
data("TCGA.BC.cnv.2k.60")
data("TCGA.BC.gene.exp.2k.60")
data("TCGA.BC.sample60")

data("TCGA.BCHer2cnvexp")

pvalue=−1✯log10(TCGA.BCHer2cnvexp[,5])
pvalue=cbind(TCGA.BCHer2cnvexp[,c(1:3)],pvalue)

Her2.i=which(TCGA.BC.sample60[,2]=="Her2")
Her2.n=TCGA.BC.sample60[Her2.i,1]
Her2.j=which(colnames(TCGA.BC.cnv.2k.60)%in%Her2.n)
cnv=TCGA.BC.cnv.2k.60[,c(1:3,Her2.j)]
cnv.m=cnv[,c(4:ncol(cnv))]
cnv.m[cnv.m>2]=2
cnv.m[cnv.m<−2]=−2
cnv=cbind(cnv[,1:3],cnv.m)

Her2.j=which(colnames(TCGA.BC.gene.exp.2k.60)%in%Her2.n)
gene.exp=TCGA.BC.gene.exp.2k.60[,c(1:3,Her2.j)]

colors=rainbow(10,alpha=0.5)
par(mar=c(2,2,2,2))
plot(c(1,800),c(1,800),type="n",axes=FALSE,xlab="",ylab="",main="")
circos(R=400,cir="hg18",W=4,type="chr",print.chr.lab=TRUE,scale=TRUE)
circos(R=300,cir="hg18",W=100,mapping=gene.exp,col.v=4,type="heatmap2",7cluster=TRUE,col.bar=TRUE,lwd=0.1,col="blue")
circos(R=220,cir="hg18",W=80,mapping=cnv,col.v=4,type="ml3",B=FALSE,lwd
=1,cutoff=0)
circos(R=140,cir="hg18",W=80,mapping=pvalue,col.v=4,type="l",B=TRUE,
lwd=1,col=colors[1])

cols=rep(colors[7],nrow(TCGA.BC.fus))
col.i=which(TCGA.BC.fus[,1]==TCGA.BC.fus[,4])
cols[col.i]=colors[1]
circos(R=130,cir="hg18",W=10,mapping=TCGA.BC.fus,type="link2",lwd=2,col=cols)

这样我们就实现了circos图与热图的结合,如果希望结合箱线图等类型,也是同样的做法。

小编总结

我们可以看到通过OmicCircos包绘制的基因组circos图是非常高颜值的,可以直接用于论文,有些代码看起来比较长,其实是一层层的绘制circos,了解以后就会非常简单!学会这个工具,多组学数据的环形可视化不成问题!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作图丫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档