我尝试使用Gviz
plotTracks
函数生成曲目图。
例如,我试图从gencode.v25.primary_assembly.annotation.gtf绘制这三个成绩单:
"ENST00000352151.9","ENST00000550488.5","ENST00000335154.9"
(全部来自基因:ENSG00000161791.13
)
因此,我尝试使用仅包含这三个记录的GeneRegionTrack
条记录的data.frame来调用GTF
:
require(rtracklayer)
#gtf.fn is the gencode.v25.primary_assembly.annotation.gtf file
gtf.df <- as.data.frame(import(gtf.fn))
my.transcripts.gtf.df <- dplyr::filter(gtf.df, transcript_id %in% c("ENST00000352151.9","ENST00000550488.5","ENST00000335154.9"))
> dim(my.transcripts.gtf.df)
[1] 171 27
并且(天真地)用GeneRegionTrack
:
my.transcripts.gtf.df
require(Gviz)
gene.region.track <-GeneRegionTrack(range=my.transcripts.gtf.df,genome="hg38",chromosome=my.transcripts.gtf.df$seqnames[1],name="Gene Model")
ideogram.track <- IdeogramTrack(genome=genome,chromosome=as.character(t.df$chromosome[1]))
plotTracks(list(ideogram.track,axis.track,gene.region.track))
这是因为GTF
的记录多于CDS /外显子/ UTR记录,这将使plotTracks
更有条理。
我试过了:
my.transcripts.gtf.df <- dplyr::filter(gtf.df, transcript_id %in% c("ENST00000352151.9","ENST00000550488.5","ENST00000335154.9"), type %in% c("CDS","exon","UTR"))
gene.region.track <-GeneRegionTrack(range=my.transcripts.gtf.df,genome="hg38",chromosome=my.transcripts.gtf.df$seqnames[1],name="Gene Model")
plotTracks(list(ideogram.track,axis.track,gene.region.track))
这仍然是一团糟。但我注意到的是,3&#39; UTR似乎与所有外显子的宽度相同。
所以我尝试处理我的GTF
,使其与Gviz
中的determineGtfFeature <- function(t.gtf.df){
if(length(which(unique(t.gtf.df$type) == "CDS")) > 0){
res.gtf.df <- dplyr::filter(t.gtf.df,type =="CDS")
res.gtf.df$type <- NA
res.gtf.df$type <- "protein_coding"
if(length(which(unique(t.gtf.df$type) == "UTR")) > 0){
utr.gtf.df <- dplyr::filter(t.gtf.df,type == "UTR")
utr.gtf.df <- utr.gtf.df[order(utr.gtf.df$start),]
if(utr.gtf.df$strand[1] == "+"){
utr5.idx <- which(utr.gtf.df$end < min(res.gtf.df$start))
utr3.idx <- which(utr.gtf.df$start > max(res.gtf.df$end))
} else{
utr3.idx <- which(utr.gtf.df$end < min(res.gtf.df$start))
utr5.idx <- which(utr.gtf.df$start > max(res.gtf.df$end))
}
utr.gtf.df$type <- NA
utr.gtf.df$type[utr5.idx] <- "utr5"
utr.gtf.df$type[utr3.idx] <- "utr3"
res.gtf.df <- rbind(res.gtf.df,utr.gtf.df)
}
} else{
if(grepl("pseudogene",t.gtf.df$transcript_type)==T){
res.gtf.df <- dplyr::filter(t.gtf.df,type =="exon")
res.gtf.df$type <- "pseudogene"
} else{
res.gtf.df <- dplyr::filter(t.gtf.df,type =="exon")
res.gtf.df$type <- "lincRNA"
}
}
res.gtf.df$type <- factor(res.gtf.df$type,levels=unique(res.gtf.df$type))
res.gtf.df <- res.gtf.df[,-which(colnames(res.gtf.df) == "transcript_type")]
return(res.gtf.df)
}
兼容:
my.transcripts.gtf.df <- do.call(rbind,lapply(c("ENST00000352151.9","ENST00000550488.5","ENST00000335154.9"),function(t)
determineGtfFeature(dplyr::select(dplyr::filter(gtf.df, transcript_id == t),seqnames,start,end,width,strand,type,gene_id,exon_id,transcript_id,gene_name,transcript_type))))
colnames(my.transcripts.gtf.df)[c(1,6,7,8,9,10)] <- c("chromosome","feature","gene","exon","transcript","symbol")
tid.starts <- sort(sapply(unique(my.transcripts.gtf.df$transcript),function(t) min(dplyr::filter(my.transcripts.gtf.df,transcript == t)$start)))
my.transcripts.gtf.df$transcript.index <- sapply(my.transcripts.gtf.df$transcript,function(t) which(names(my.transcripts.gtf.df) == t))
my.transcripts.gtf.df <- my.transcripts.gtf.df[order(my.transcripts.gtf.df$transcript.index,my.transcripts.gtf.df$start),]
my.transcripts.gtf.df <- my.transcripts.gtf.df[,-which(colnames(my.transcripts.gtf.df) == "transcript.index")]
my.transcripts.gtf.df$gene <- factor(my.transcripts.gtf.df$gene,levels=unique(my.transcripts.gtf.df$gene))
my.transcripts.gtf.df$exon <- factor(my.transcripts.gtf.df$exon,levels=unique(my.transcripts.gtf.df$exon))
my.transcripts.gtf.df$transcript <- factor(my.transcripts.gtf.df$transcript,levels=unique(my.transcripts.gtf.df$transcript))
my.transcripts.gtf.df$symbol <- factor(my.transcripts.gtf.df$symbol,levels=unique(my.transcripts.gtf.df$symbol))
然后:
gene.region.track <- GeneRegionTrack(range=my.transcripts.gtf.df,genome=genome,chromosome=as.character(t.df$chromosome[1]),name="Gene Model")
plotTracks(list(ideogram.track,axis.track,gene.region.track))
所以:
utr3
现在给出: vignette
只有my.transcripts.gtf.df
中间抄本的宽度适当,但其他两个don
据我检查 data(geneModels)
兼容:
Gviz
所以我的问题是:
是否有一种简单的方法可以让transcript
从标准GTF
文件中绘制请求的GTF
,而不必经历编辑它的麻烦。可能不是,因此geneModels
需要采用与data.frame
displayPars(gene.region.track)
相同的格式。所以任何想法为什么utr3的行为不端?
displayPars(gene.region.track)$stackHeight <- 0.1
中的哪个参数控制了曲目之间的间距?如果我设置 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.caringhumans.rds.caringhumans.MainActivity">
<ImageView
android:id="@+id/logo"
android:src="@drawable/logo"
android:layout_width="28dp"
android:layout_height="28dp"
android:layout_toLeftOf="@+id/caring"/>
<TextView
android:id="@+id/caring"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Caring Humans"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textSize="25sp"
android:textColor="#f70f59"/>
<ImageView
android:id="@+id/child"
android:src="@drawable/child"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/text"
android:layout_below="@+id/caring"/>
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Campaign"
android:textColor="#f70f59"
android:textSize="22sp"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
曲目变得更窄,它们之间留下了很大的空间,我想缩小那个空间。