Thanks, that's an interesting way to create transcript visualizations!
(I also asked this question on the Bioconductor support site here.)
I'm stumped. I'm trying to plot a few transcripts at the same time, given transcript names and a TxDb. These are examples of approaches I've tried:
# ------------------------------------------------------------------------------
# Setup:
library(TxDb.Hsapiens.UCSC.hg19.knownGene)
library(Gviz)
txdb <- TxDb.Hsapiens.UCSC.hg19.knownGene
# ------------------------------------------------------------------------------
# Try 1:
gr <- GenomicFeatures::exons(
txdb,
vals = list(tx_name = c("uc001aaa.3", "uc010nxq.1")),
columns = list("EXONNAME", "TXNAME", "GENEID"))
track <- Gviz::GeneRegionTrack(gr)
Gviz::plotTracks(track)
# Creates a plot, but doesn't show transcript grouping

# ------------------------------------------------------------------------------
# Try 2
gr <- GenomicFeatures::transcripts(
txdb,
vals = list(tx_name = c("uc001aaa.3", "uc010nxq.1")),
columns = list("EXONNAME", "TXNAME", "GENEID"))
track <- Gviz::GeneRegionTrack(gr)
Gviz::plotTracks(track)
# Creates a plot, but has no exon/intron information

# ------------------------------------------------------------------------------
# Try 3
gr <- exonsBy(txdb, by = "tx", use.names=TRUE)[c("uc001aaa.3", "uc010nxq.1")]
track <- Gviz::GeneRegionTrack(gr)
# Error in .fillWithDefaults(DataFrame(chromosome = as.character(seqnames(range)), :
# Number of elements in argument 'feature' is invalid
None of these work for me. I want to display exon/intron-structures and have arrows between exons. Does anyone have suggestions?
2 answers
I found a solution that worked! Typical to find it shortly after asking the question, but here it is:
# ------------------------------------------------------------------------------
# Try 4
gr <- exonsBy(txdb, by = "tx", use.names=TRUE)[c("uc001aaa.3", "uc010nxq.1")]
gr <- unlist(gr)
elementMetadata(gr)$transcript <- names(gr)
track <- Gviz::GeneRegionTrack(gr)
Gviz::plotTracks(track)

Using exonsBy gives a GrangesList with one GRanges object for each transcript. Unlisting the GrangesList creates a named (important!) GRanges object with all exons. Using those names to set the $transcript metadata column solved the problem.
can't resist: using mysql+ucsc and XSLT :-P
the stylesheet: https://github.com/lindenb/xslt-sandbox/blob/master/stylesheets/bio/ucsc/ucsc-sql2svg.xsl
mysql --user=genome --host=genome-mysql.cse.ucsc.edu -D hg19 -e 'select * from knownGene where name in ("uc001aaa.3","uc010nxq.1")' -X |\
xsltproc stylesheets/bio/ucsc/ucsc-sql2svg.xsl - > out.svg

dont like the design very much
Log in to answer this question.