网页参考(首推):
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画图小栗子
从上图我们可以看到图片是从上往下排版。使用这个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
library(Gviz)
library(GenomicRanges)
idTrack1 <- IdeogramTrack(chr2, genome="hg38")
plotTracks(idTrack, from=10000, to=9000000)
#这里的from 以及to是画红框的位置
?IdeogramTrack #使用该命令查看具体的参数
- 画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
[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
[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)
- 画基因组坐标
由于GenomeAxisTrack对象(即基因组坐标对象)是一个参考坐标系,对于其他的track是相对的,因此不需要额外的参数。基本上,这个对象只是告诉plotTracks函数向绘图中添加一个基因组轴。
gtrack <- GenomeAxisTrack()
plotTracks(list(idTrack,gtrack,atrack1))
#gtrack不能单独画出来,因为他就是一个坐标轴,这里把刚才生成的track整合在一个list中,就可以一起画出来了。
到这里,我的问题基本解决了。从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的大小的
我感觉我现在画图的这个基因没有被很好的注释,所以这张图有点翻车。
展示一下参考网址里面的图。
- 使用下载的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)
控制图片显示的范围
在前面所有这些例子中,绘制的基因组范围都是默认的。plotTracks支持from和To参数,让我们选择一个任意的基因组范围进行绘图。
plotTracks(list(idTrack,gtrack,atrack1), from = 101006350, to = 101006418)
这里就画了最后一个外显子的范围。所以图中显示的是最后一个外显子。
另一对参数是extend.left和extend.right。用于缩放图片。除了正的或负的绝对整数值,还可以提供一个介于-1和1之间的浮点值,该值将被解释为缩放因子,即0.5的值将导致放大到当前显示范围的一半。
画数值的图 (比较重要)
DataTrack对象本质上是运行长度编码的数字向量或矩阵,我们可以使用它们将各种数字数据添加到我们的基因组坐标图中。这些轨迹有一大堆不同的可视化选项,从点图到直方图,再到方框图和胡须图。
照着模仿了一下。
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])
其实,就是在你画图的范围内生随机生成一些值,画成散点图。
这里的coords就是genomic regions,就是x轴的位置,而data就是我们需要画的值。所以两者的数量必须要对得上,当然这里是随机生成的。
能画很多类型的图片呢!!
这个R包还能把bam文件中的表达值画折线图,这里不再赘述了,大家看参考的网页吧。
一些其他的方法画isoform结构图,也可以直接用ggplot画。以及R包ggbio。
- https://www.jianshu.com/p/e76aa85a3a79?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
- https://www.jianshu.com/p/9bfad9023d96
- https://www.jianshu.com/p/2f139f9fe5cf