[BioC] ggbio: Separating lines between chromosomes with plotGrandLinear

Julian Gehring julian.gehring at embl.de
Wed Mar 26 18:34:22 CET 2014


Hi Tengfei,

Great, thanks!  Works like a charm.

Best wishes
Julian


On 26/03/14 17:46, Tengfei Yin wrote:
> Here is a workaround for your request, I need to implement an better
> option for plotGrandLinear function. I basically get current data frame
> and compute border manually.
> 
> #####
> p <- plotGrandLinear(gr.snp, aes(y = pvalue), color = c("#7fc97f",
> "#fdc086"))
> vline.df <- p at ggpplot$data
> vline.df <- do.call(rbind, by(vline.df, vline.df$seqnames, function(dd){
>   data.frame(start = min(dd$start),
>              end = max(dd$end))
> }))
> ## compute gap
> gap <- (vline.df$start[-1] + vline.df$end[-nrow(vline.df)])/2
> p + geom_vline(xintercept = gap, alpha = 0.5, color = 'gray70') +
> theme(panel.grid = element_blank())
> 
> #####
> Inline image 1
> 
> 
> On Wed, Mar 26, 2014 at 11:03 AM, Tengfei Yin
> <tengfei.yin at sbgenomics.com <mailto:tengfei.yin at sbgenomics.com>> wrote:
> 
>     exactly, I realize the color maybe used for mapping, I am working on
>     a solution like this
> 
>     step 1. clear the panel grid first by using theme()
>     step 2. add grid line manually, this is very tricky, because the
>     data is transformed to not over integer limits, check out 
>     metadata(p at data)
>     you will see some meta data come from
>     biovizBase::transformToGenome() function, also space between
>     chromosome added, case even get complicated when your original data
>     has or doesn't have seqlengths, 
> 
>     I will get back to you on this asap this afternoon 
> 
>     cheers
> 
>     Tengfei
> 
> 
>     On Wed, Mar 26, 2014 at 10:50 AM, Julian Gehring
>     <julian.gehring at embl.de <mailto:julian.gehring at embl.de>> wrote:
> 
>         Hi Tengfei,
> 
>         Separating by color works nicely, but becomes problematic here
>         because I
>         want to encode another entity by color.
> 
>         Is it possible to add 'vlines' on top of the existing plot?  I have
>         tried it with
> 
>           p + autoplot(x, aes(xintercept = start), geom = "vline", coord
>         = "genome")
> 
>         but without success.
> 
>         Best wishes
>         Julian
> 
> 
>         On 26/03/14 15:30, Tengfei Yin wrote:
>         > first existing 'official' solution to separate group easily is
>         to use
>         > 'color' parameters in "plotGrandLinear" function, you can assign a
>         > vector of color (2, or 3 or length of chromosome) and this will be
>         > cycled and assigned to each group
>         >
>         > plotGrandLinear(gr.snp, aes(y = pvalue), color = c("#7fc97f",
>         "#fdc086"))
>         >
>         > I forget to document this color parameters in plotGrandLinear,
>         I do have
>         > them in the example of manual, but autoplot() doesn't support this
>         > special color assignment  yet.
>         >
>         > Inline image 1
>         > I need to work on a theme() solution if you still want to put line
>         > between chromosome.
>         >
>         > cheers
>         >
>         > Tengfei
>         >
>         >
>         >
>         > On Wed, Mar 26, 2014 at 10:15 AM, Tengfei Yin
>         > <tengfei.yin at sbgenomics.com
>         <mailto:tengfei.yin at sbgenomics.com>
>         <mailto:tengfei.yin at sbgenomics.com
>         <mailto:tengfei.yin at sbgenomics.com>>> wrote:
>         >
>         >     oh wait, sorry, you are talking about plotGranlinear, not
>         layout
>         >     karyogram... I guess I need a coffee in the morning first
>         :) let me
>         >     check to see if there is any quick workaround.
>         >
>         >     cheers
>         >
>         >     Tengfei
>         >
>         >
>         >     On Wed, Mar 26, 2014 at 10:08 AM, Tengfei Yin
>         >     <tengfei.yin at sbgenomics.com
>         <mailto:tengfei.yin at sbgenomics.com>
>         <mailto:tengfei.yin at sbgenomics.com
>         <mailto:tengfei.yin at sbgenomics.com>>> wrote:
>         >
>         >         Hi Julian,
>         >
>         >         yes, you could use ylim parameter in layout_karyogram() to
>         >         control this and to layout different group at
>         different height
>         >         layer by layer, because by default the chromosome
>         height limits
>         >         are [0, 10], if you set ylim outside the region like
>         [10, 15],
>         >         it will plot them outside, an example to plot
>         different group at
>         >         different height is shown below, I know it's just a
>         workaround,
>         >         I probably need to provide a simpler way
>         >
>         >         ########
>         >         library(ggbio)
>         >         data(hg19IdeogramCyto, package = "biovizBase")
>         >         data(hg19Ideogram, package = "biovizBase")
>         >         library(GenomicRanges)
>         >         ##  simul_snp
>         >         chrs <- as.character(levels(seqnames(hg19IdeogramCyto)))
>         >         seqlths <- seqlengths(hg19Ideogram)[chrs]
>         >         set.seed(1)
>         >         nchr <- length(chrs)
>         >         nsnps <- 100
>         >         gr.snp <- GRanges(rep(chrs,each=nsnps),
>         >                           IRanges(start =
>         >                                     do.call(c, lapply(chrs,
>         function(chr){
>         >                                       N <- seqlths[chr]
>         >                                       runif(nsnps,1,N)
>         >                                     })), width = 1),
>         >                           SNP=sapply(1:(nchr*nsnps), function(x)
>         >         paste("rs",x,sep='')),
>         >                           pvalue =  -log10(runif(nchr*nsnps)),
>         >                           group = sample(c("Normal", "Tumor"),
>         size =
>         >         nchr*nsnps,
>         >                                          replace = TRUE)
>         >         )
>         >         gr.snp
>         >         ##names(seqlths) <- gsub("chr", "", names(seqlths))
>         >         seqlths
>         >         seqlengths(gr.snp) <- seqlths[names(seqlengths(gr.snp))]
>         >         gr.snp.bac <- gr.snp
>         >         seqinfo(gr.snp)
>         >         gr.snp <- keepSeqlevels(gr.snp, c("chr1", "chr2",
>         "chr3", "chr4"))
>         >
>         >         ## above this line is just creating simulated data
>         >         ## suppose you have your snp data store in gr.snp
>         >         ## you have to split the group for now, sorry
>         >         grl.snp <- split(gr.snp, gr.snp$group)
>         >         grl.snp
>         >
>         >         autoplot(seqinfo(grl.snp)) + layout_karyogram(data =
>         >         grl.snp[[1]], color = "red", ylim = c(0, 10) ) +
>         >           layout_karyogram(data = grl.snp[[2]], color =
>         "blue", ylim =
>         >         c(10, 20) )
>         >
>         >         #########
>         >
>         >         HTH
>         >
>         >         Tengfei
>         >
>         >
>         >         On Wed, Mar 26, 2014 at 8:49 AM, Julian Gehring
>         >         <julian.gehring at embl.de
>         <mailto:julian.gehring at embl.de> <mailto:julian.gehring at embl.de
>         <mailto:julian.gehring at embl.de>>> wrote:
>         >
>         >             Hi,
>         >
>         >             The 'plotGrandLinear' or the respective 'autoplot'
>         function
>         >             of the
>         >             'ggbio' package make it easy to visualize all the
>         >             chromosomes of a
>         >             genomes together.  For example:
>         >
>         >             autoplot(gr.snp, coord = "genome", geom = "point",
>         aes(y =
>         >             pvalue),
>         >             space.skip = 0.01) ## taken from
>         'example(plotGrandLinear'
>         >
>         >             produces a plot for all human chromosomes with
>         vertical
>         >             lines in the
>         >             middle of each chromosome.  Can one easily adapt
>         this, in
>         >             the way that
>         >             the vertical lines fall between the chromosomes?
>          This would
>         >             be helpful
>         >             for distinguishing/separating them.
>         >
>         >             Best wishes
>         >             Julian
>         >
>         >             _______________________________________________
>         >             Bioconductor mailing list
>         >             Bioconductor at r-project.org
>         <mailto:Bioconductor at r-project.org>
>         <mailto:Bioconductor at r-project.org
>         <mailto:Bioconductor at r-project.org>>
>         >             https://stat.ethz.ch/mailman/listinfo/bioconductor
>         >             Search the archives:
>         >            
>         http://news.gmane.org/gmane.science.biology.informatics.conductor
>         >
>         >
>         >
>         >
>         >         --
>         >         Tengfei Yin, PhD
>         >         Seven Bridges Genomics
>         >         sbgenomics.com <http://sbgenomics.com>
>         <http://sbgenomics.com/>
>         >         625 Mt. Auburn St. Suite #208
>         >         Cambridge, MA 02138
>         >         (617) 866-0446 <tel:%28617%29%20866-0446>
>         >
>         >
>         >
>         >
>         >     --
>         >     Tengfei Yin, PhD
>         >     Seven Bridges Genomics
>         >     sbgenomics.com <http://sbgenomics.com>
>         <http://sbgenomics.com/>
>         >     625 Mt. Auburn St. Suite #208
>         >     Cambridge, MA 02138
>         >     (617) 866-0446 <tel:%28617%29%20866-0446>
>         >
>         >
>         >
>         >
>         > --
>         > Tengfei Yin, PhD
>         > Seven Bridges Genomics
>         > sbgenomics.com <http://sbgenomics.com> <http://sbgenomics.com/>
>         > 625 Mt. Auburn St. Suite #208
>         > Cambridge, MA 02138
>         > (617) 866-0446 <tel:%28617%29%20866-0446>
> 
> 
> 
> 
>     -- 
>     Tengfei Yin, PhD
>     Seven Bridges Genomics
>     sbgenomics.com <http://sbgenomics.com/>
>     625 Mt. Auburn St. Suite #208
>     Cambridge, MA 02138
>     (617) 866-0446
> 
> 
> 
> 
> -- 
> Tengfei Yin, PhD
> Seven Bridges Genomics
> sbgenomics.com <http://sbgenomics.com/>
> 625 Mt. Auburn St. Suite #208
> Cambridge, MA 02138
> (617) 866-0446



More information about the Bioconductor mailing list