isoform结构绘图----R包Gviz (IGV菀菀类卿)

网页参考(首推):
http://www.bioconductor.org/packages/release/bioc/vignettes/Gviz/inst/doc/Gviz.html
B站教学视频:
https://www.bilibili.com/video/BV1mW411N7mD?p=12&t=3
参考网址:
https://cloud.tencent.com/developer/article/1473563
参考文献:
Plotting data and annotation information along genomic coordinates


Gviz画图小栗子

example

从上图我们可以看到图片是从上往下排版。使用这个R包也是在不断地构建新的track对象,例如针对染色体的track对象,针对参考基因组得track,然后使用plotrack()函数画图。
在学习Gviz之前需要对GenomicRanges包进行一定的学习
参考: https://www.jianshu.com/p/045997192d09
*安装

if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")

BiocManager::install("Gviz")

  • 画染色体
    这里使用的数据,是我从gtf文件中提出的某个基因的isoform信息,文件名为test1
    image.png
library(Gviz)
library(GenomicRanges)
idTrack1 <- IdeogramTrack(chr2, genome="hg38")
plotTracks(idTrack, from=10000, to=9000000)
#这里的from 以及to是画红框的位置
?IdeogramTrack #使用该命令查看具体的参数
image.png

  • 画isofrom结构
#首先利用exon的start以及end构建一个IRanges对象(IRanges对象是GenomicRanges包中的)
test1_ranges = IRanges(test1$start, test1$end)
> test1_ranges
IRanges object with 4 ranges and 0 metadata columns:
          start       end     width
      <integer> <integer> <integer>
  [1] 101002691 101002808       118
  [2] 101004158 101004361       204
  [3] 101005959 101006071       113
  [4] 101006350 101006418        69
#进一步构建一个GRanges对象
> gr1 <- GRanges(seqnames='chr2',
+                ranges=test1_ranges,
+                strand=rep("*", 4))
> gr1
GRanges object with 4 ranges and 0 metadata columns:
      seqnames              ranges strand
         <Rle>           <IRanges>  <Rle>
  [1]     chr2 101002691-101002808      *
  [2]     chr2 101004158-101004361      *
  [3]     chr2 101005959-101006071      *
  [4]     chr2 101006350-101006418      *
  -------
  seqinfo: 1 sequence from an unspecified genome; no seqlengths
#GRanges中的每个参数,请看自行查阅GenomicRanges包的说明。
> atrack1 <- AnnotationTrack(gr1, name="gr1")
#使用 AnnotationTrack函数对GRanges对象进行打包。
> atrack1
AnnotationTrack 'gr1'
| genome: NA
| active chromosome: chr2
| annotation features: 4
#最后就是使用plotrack对其进行画图了
 plotTracks(atrack1)
image.png

  • 画基因组坐标
    由于GenomeAxisTrack对象(即基因组坐标对象)是一个参考坐标系,对于其他的track是相对的,因此不需要额外的参数。基本上,这个对象只是告诉plotTracks函数向绘图中添加一个基因组轴。
gtrack <- GenomeAxisTrack()
plotTracks(list(idTrack,gtrack,atrack1))
#gtrack不能单独画出来,因为他就是一个坐标轴,这里把刚才生成的track整合在一个list中,就可以一起画出来了。
image.png

到这里,我的问题基本解决了。从gtf中提取isoform的结构画图,当你需要一个图中画多个isoform的时候,就多构建几个track,然后list在一起就好了。


补充

这个R包可以近似替代IGV,所以还有一些其他的功能,在这里再进一步介绍。
增加注释基因组做坐标
到目前为止,只介绍了这个包非常基本的注释功能,以及如何给我们的绘图提供一个参考点。当然,我们也希望能够处理更复杂的基因组特征,比如基因模型。一个方法是利用本地的基因模型信息。或者,我们可以从在线资源(如UCSC或ENSEBML)下载此类数据,并且有包内的函数来处理。在本例中,我们将从存储的data.frame加载基因模型数据。这里选择的track类是GeneRegionTrack对象,它可以通过同名的构造函数创建。

data(geneModels)
grtrack <- GeneRegionTrack(geneModels, genome = "hg38",
                           chromosome = chr2, name = "Gene Model")
plotTracks(list(idTrack, gtrack, atrack1, grtrack),sizes = c(1,1,0.5,1))
#这里的sizes是用来定义每个track的大小的
image.png

我感觉我现在画图的这个基因没有被很好的注释,所以这张图有点翻车。
展示一下参考网址里面的图。


image.png
  • 使用下载的gtf文件构建tracks画图
library("rtracklayer")
gtf_data = import('gencode.v35.annotation.gtf') %>% 
  as.data.frame() #导入gtf文件
#提取出如网站案例中gene models相同的列,并且重命名
gene_models = filter(gtf_data, gtf_data$type == 'exon') %>% .[,c(1:5, 11, 10,23,16)]
colnames(gene_models) = c("chromosome","start","end","width","strand","feature",   
                   "gene","exon","transcript")
test = gene_models[1:20,]

grtrack <- GeneRegionTrack(test, genome = "hg38",
                           chromosome = 'chr1', name = "Gene Model", 
                           transcriptAnnotation = 'transcript',
                           background.title = "brown")
displayPars(grtrack) <- list(background.panel = "#FFFEDB", col = NULL)
plotTracks(grtrack)
image.png

控制图片显示的范围
在前面所有这些例子中,绘制的基因组范围都是默认的。plotTracks支持from和To参数,让我们选择一个任意的基因组范围进行绘图。

plotTracks(list(idTrack,gtrack,atrack1), from = 101006350, to = 101006418)
image.png

这里就画了最后一个外显子的范围。所以图中显示的是最后一个外显子。

另一对参数是extend.left和extend.right。用于缩放图片。除了正的或负的绝对整数值,还可以提供一个介于-1和1之间的浮点值,该值将被解释为缩放因子,即0.5的值将导致放大到当前显示范围的一半。
画数值的图 (比较重要)
DataTrack对象本质上是运行长度编码的数字向量或矩阵,我们可以使用它们将各种数字数据添加到我们的基因组坐标图中。这些轨迹有一大堆不同的可视化选项,从点图到直方图,再到方框图和胡须图。

image.png

照着模仿了一下。

set.seed(255)
lim <- c(101002691, 101006418)
coords <- sort(c(lim[1], 
                 sample(seq(from = lim[1], to = lim[2]), 99), 
                 lim[2]))
dat <- runif(100, min = -10, max = 10)
dtrack <- DataTrack(data = dat, start = coords[-length(coords)],
                    end = coords[-1], chromosome = chr2, genome = "hg38", 
                    name = "Uniform")
plotTracks(list(idTrack,gtrack,atrack1,dtrack), rom = lim[1], to = lim[2])
image.png

其实,就是在你画图的范围内生随机生成一些值,画成散点图。
这里的coords就是genomic regions,就是x轴的位置,而data就是我们需要画的值。所以两者的数量必须要对得上,当然这里是随机生成的。
能画很多类型的图片呢!!

image.png

这个R包还能把bam文件中的表达值画折线图,这里不再赘述了,大家看参考的网页吧。

一些其他的方法画isoform结构图,也可以直接用ggplot画。以及R包ggbio。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容