绘图技巧科研信息学生物信息可视化

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

2021-05-29  本文已影响0人  日月其除

网页参考(首推):
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")

library(Gviz)
library(GenomicRanges)
idTrack1 <- IdeogramTrack(chr2, genome="hg38")
plotTracks(idTrack, from=10000, to=9000000)
#这里的from 以及to是画红框的位置
?IdeogramTrack #使用该命令查看具体的参数
image.png
#首先利用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
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
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。

上一篇下一篇

猜你喜欢

热点阅读