自定义Gviz的plotTracks函数

时间:2017-01-02 05:31:46

标签: r ggplot2 bioconductor cowplot

我尝试使用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))

我有点乱: enter image description here

这是因为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))

我得到: enter image description here

这仍然是一团糟。但我注意到的是,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

Gviz&#39; s enter image description here中使用。

所以我的问题是:

  1. 是否有一种简单的方法可以让transcript从标准GTF文件中绘制请求的GTF,而不必经历编辑它的麻烦。可能不是,因此geneModels需要采用与data.frame displayPars(gene.region.track)相同的格式。所以任何想法为什么utr3的行为不端?

  2. 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> 曲目变得更窄,它们之间留下了很大的空间,我想缩小那个空间。

0 个答案:

没有答案