其他
听说你想把Gviz画的基因结构转成ggplot?
在《ggplotify - version 0.0.4》一文中,有粉丝说想要支持Gviz包,画图包如果输出的是对象,那么我们可以写方法针对这个对象,然而Gviz的输出,却是list,显然这个方法走不通。
《ggsave支持base plot》一文中,我们知道可以使用base2grob
来转化base plot为grob
对象,乃至于ggplot2
对象。然而Gviz
包不是使用base plot来写的,它是使用grid
来实现的,但又不输出grob
对象,而是直接画图。针对这种情况,我在ggplotify
包中又加入了grid2grob
函数,以对应于base2grob
函数。那么顾名思义,grid2grob
函数可以把使用grid
出图的,都转成grob对象,它适用于所有基于grid
出的图,包括图A中的Gviz,当然也包括图B中的ggplot2
(虽然例子中转ggplot2是多此一举)。
画图A的代码
library(Gviz)
library(GenomicRanges)
data(cpgIslands)
atrack <- AnnotationTrack(cpgIslands, name = "CpG")
gtrack <- GenomeAxisTrack()
gen<-genome(cpgIslands)
chr <- as.character(unique(seqnames(cpgIslands)))
itrack <- IdeogramTrack(genome = gen, chromosome = chr)
data(geneModels)
grtrack <- GeneRegionTrack(geneModels, genome = gen,
chromosome = chr, name = "Gene Model")
plotTracks(list(itrack, gtrack, atrack, grtrack))
其实不使用新版,也是可以支持Gviz
的,虽然它的输出(直接画图+返回一个list)不能被直接转变成grob
和ggplot2
,但直接画图的函数是可以直接的,于是我们只需要简单地把画图的语句包装成一个函数,诸如function() plot_something
,然后把这个函数传给as.grob
或者as.ggplot
就可以实现转化啦,所以旧版本也是支持的,只是你不懂得用而已。
往期精彩