網頁參考(首推):
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包進行一定的學習
參考: http://www.lxweimin.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 #使用該命令查看具體的參數
- 畫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)
-
畫基因組坐標
由于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。