devtools::load_all("~/projects/gTrack") library(gTrack) library(gUtils) knitr::opts_chunk$set(fig.height=10)
This is a (non-comprehensive) overview of gTrack
parameters that are commonly modified from their default values.
Somtimes it is helpful to plot two non-contiguous genomic ranges side-by-side. This might happen if you're plotting a structural variant with breakends that are very distant from each other, or even on separate chromosomes. This can be done by supplying multiple ranges as the plotting window as either a GRanges
or GRangesList
. The following is an example of a plot with discontiguous ranges.
coverage.gr = readRDS(system.file("extdata", "ovcar.subgraph.coverage.rds", package = "gTrack")) coverage.gt = gTrack(coverage.gr, y.field = "cn", circles = TRUE, lwd.border = 0.2, y0 = 0, y1 = 12) gg = readRDS(system.file("extdata", "ovcar.subgraph.rds", package = "gTrack")) win = stack(gg$junctions[type == "ALT"]$grl[1])[, c()] plot(c(coverage.gt, gg$gt), win + 5e4)
The x-coordinate of gTrack
data is always a genomic interval. The y-coordinate can be either unspecified, or supplied in a metadata column of the GRanges
or GRangesList
. The name of this metadata column can be specified by supplying a character string to argument for y.field
.
In the following example, we will plot two different metadata fields, one named foreground
and one named cn
.
coverage.gr = readRDS(system.file("extdata", "ovcar.subgraph.coverage.rds", package = "gTrack")) ## read depth gTrack without name argument coverage.cn.gt = gTrack(coverage.gr, y.field = "cn", circles = TRUE, lwd.border = 0.2, y0 = 0, y1 = 12) ## read depth gTrack with name argument coverage.foreground.gt = gTrack(coverage.gr, y.field = "foreground", circles = TRUE, lwd.border = 0.2, y0 = 0, y1 = 12) fp = parse.gr("1:6043576-7172800") plot(c(coverage.cn.gt, coverage.foreground.gt), fp + 1e5)
The name
specifies the track label that is shown to the right of a subplot. Arguments must be character vectors. The default behavior is to set name
to an empty string if y.field
is not specified, and otherwise to set name
to the value passed to y.field
. Below is an example of a scatter plot with and without a name
argument.
coverage.gr = readRDS(system.file("extdata", "ovcar.subgraph.coverage.rds", package = "gTrack")) ## read depth gTrack without name argument coverage.gt = gTrack(coverage.gr, y.field = "cn", circles = TRUE, lwd.border = 0.2, y0 = 0, y1 = 12) ## read depth gTrack with name argument coverage.name.gt = gTrack(coverage.gr, name = "coverage", y.field = "cn", circles = TRUE, lwd.border = 0.2, y0 = 0, y1 = 12) fp = parse.gr("1:6043576-7172800") plot(c(coverage.gt, coverage.name.gt), fp + 1e5)
The Y-axis of a gTrack
can be toggled on or off entirely using the logical parameter yaxis
, which has default value TRUE
if y.field
is specified and FALSE
if not.
Here is an example where yaxis
is deliberately set as FALSE
despite suppling a value to y.field
.
coverage.gr = readRDS(system.file("extdata", "ovcar.subgraph.coverage.rds", package = "gTrack")) ## read depth gTrack coverage.gt = gTrack(coverage.gr, y.field = "cn", circles = TRUE, lwd.border = 0.2, y0 = 0, y1 = 12) ## read depth gTrack without Y-axis label coverage.noy.gt = gTrack(coverage.gr, y.field = "cn", circles = TRUE, lwd.border = 0.2, y0 = 0, y1 = 12, yaxis = FALSE) fp = parse.gr("1:6043576-7172800") plot(c(coverage.gt, coverage.noy.gt), fp + 1e5)
By default, the minimum and maximum y-axis values are determined by the values of the 1st and 99th percentiles of the data to be plotted. This percentile can be changed by adjusting y.quantile
in order to plot a wider or narrower range of points. The example below compares two different values of y.quantile
.
coverage.gr = readRDS(system.file("extdata", "ovcar.subgraph.coverage.rds", package = "gTrack")) ## plot points between 1st and 99th percentile coverage.1.gt = gTrack(coverage.gr, y.field = "cn", circles = TRUE, lwd.border = 0.2, y.quantile = 0.01) ## plot points between 20th and 80th percentile coverage.20.gt = gTrack(coverage.gr, y.field = "cn", circles = TRUE, lwd.border = 0.2, y.quantile = 0.2) fp = parse.gr("1:6043576-7172800") plot(c(coverage.1.gt, coverage.20.gt), fp + 1e5)
The minimum and maximum y-axis values can also be specified directly with y0
and y1
respectively, which must be numeric values. Below is an example of the same data with two different settings for y0
and y1
.
coverage.gr = readRDS(system.file("extdata", "ovcar.subgraph.coverage.rds", package = "gTrack")) ## plot points between 0 and 12 coverage.wide.gt = gTrack(coverage.gr, y.field = "cn", circles = TRUE, lwd.border = 0.2, y0 = 0, y1 = 12) ## plot points between 5 and 10 coverage.narrow.gt = gTrack(coverage.gr, y.field = "cn", circles = TRUE, lwd.border = 0.2, y0 = 5, y1 = 10) fp = parse.gr("1:6043576-7172800") plot(c(coverage.wide.gt, coverage.narrow.gt), fp + 1e5)
Sometimes we may not want to specify limits on the y-coordinates at all, but rather ensure all points are plotted, regardless of how big or small they may be. This can be done by setting y.cap = FALSE
as shown in the following example.
coverage.gr = readRDS(system.file("extdata", "ovcar.subgraph.coverage.rds", package = "gTrack")) ## plot points 1st and 99th percentiles (default) coverage.gt = gTrack(coverage.gr, y.field = "cn", circles = TRUE, lwd.border = 0.2) ## no limits on y coverage.all.gt = gTrack(coverage.gr, y.field = "cn", circles = TRUE, lwd.border = 0.2, y.cap = FALSE) fp = parse.gr("1:6043576-7172800") plot(c(coverage.gt, coverage.all.gt), fp + 1e5)
Sometimes closely spaced genomic intervals can be difficult to discern. If no y-coordinate is specified, sometimes it is helpful to stagger these intervals vertically to make them more visually distinct. This can be done by setting the parameter stack.gap
to some numeric value. This will vertically stack adjacent intervals separated by a genomic distance (in base pairs) below that value.
## create tiled genomic intervals win = GRanges(seqnames = "1", ranges = IRanges(start = 1, width = 1e5)) tiles = gUtils::gr.tile(win, width = 1e4) ## gTrack without vertical staggering tiles.gt = gTrack(tiles, name = "original") ## stack intervals within 1 Kbp of each other tiles.stack.gt = gTrack(tiles, stack.gap = 1000, name = "stacked") plot(c(tiles.gt, tiles.stack.gt), win)
A gTrack
with a huge number of genomic intervals can take a long time to plot, and if there are many overlapping points it doesn't make sense to include all of them. To downsample points, you can set max.ranges
to some number, which will only plot that number of randomly selected points.
coverage.gr = readRDS(system.file("extdata", "ovcar.subgraph.coverage.rds", package = "gTrack")) ## plot everything coverage.gt = gTrack(coverage.gr, y.field = "cn", circles = TRUE, lwd.border = 0.2, name = "original") ## only plot 50 points coverage.downsample.gt = gTrack(coverage.gr, y.field = "cn", circles = TRUE, lwd.border = 0.2, max.ranges = 50, name = "downsampled") fp = parse.gr("1:6043576-7172800") plot(c(coverage.gt, coverage.downsample.gt), fp + 1e5)
By default, named GRanges
and GRangesList
are labeled in gTrack
. This behavior is illustrated in the following example.
## define plotting window win = GRanges(seqnames = "1", ranges = IRanges(start = 1, width = 1e5)) ## create named GRanges gr = GRanges(seqnames = "1", ranges = IRanges(start = c(1, 50001), width = 1e3), strand = "+", other_labels = c("C", "D")) names(gr) = c("A", "B") ## create gTrack gt = gTrack(gr, name = "original") plot(c(gt), win)
These labels can be hidden by setting labels.suppress
to TRUE
. If you want to specifically supress labels of a GRanges
or GRangesList
, you can also use labels.suppress.gr
or labels.suppress.grl
.
## create gTrack with no labels nolabels.gt = gTrack(gr, labels.suppress = TRUE, name = "no labels") plot(c(gt, nolabels.gt), win)
Labels can also be specified in a metadata column of a GRanges
or GRangesList
. To use these labels, the name of the relevant column should be passed as an argument for gr.labelfield
or grl.labelfield
, as seen in the example below. These will appear in the middle of the GRanges instead of on the left.
otherlabels.gt = gTrack(gr, gr.labelfield = "other_labels", name = "other labels", labels.suppress = TRUE) plot(c(gt, otherlabels.gt), win)
The size of points in a scatterplot can be controlled by lwd.border
with larger values producing larger points. Here is an illustrative example.
coverage.gr = readRDS(system.file("extdata", "ovcar.subgraph.coverage.rds", package = "gTrack")) ## two gTracks with slightly different point sizes coverage.small.gt = gTrack(coverage.gr, y.field = "cn", circles = TRUE, lwd.border = 0.2, y0 = 0, y1 = 12, name = "small") coverage.big.gt = gTrack(coverage.gr, y.field = "cn", circles = TRUE, lwd.border = 0.5, y0 = 0, y1 = 12, name = "big") fp = parse.gr("1:6043576-7172800") plot(c(coverage.small.gt, coverage.big.gt), fp + 1e5)
The thickness of plotted segments can be adjusted using the ywid
parameter.
win = GRanges(seqnames = "1", ranges = IRanges(start = 1, width = 1e5)) ## create named GRanges gr = GRanges(seqnames = "1", ranges = IRanges(start = c(1, 50001), width = 1e4), strand = "+", cn = c(1,2), labs = c("A", "B")) ## create gTrack narrow.gt = gTrack(gr, name = "narrow", ywid = 0.3) wide.gt = gTrack(gr, name = "wide", ywid = 0.5) plot(c(narrow.gt, wide.gt), win)
Alternatively, by adjusting the ywid
metadata column of supplied GRanges
, the width of each range can be adjusted individually.
win = GRanges(seqnames = "1", ranges = IRanges(start = 1, width = 1e5)) ## create named GRanges gr = GRanges(seqnames = "1", ranges = IRanges(start = c(1, 50001), width = 1e4), strand = "+", cn = c(1,2), labs = c("A", "B"), ywid = c(0.3, 0.5)) ## create gTrack gt = gTrack(gr, name = "narrow", gr.labelfield = "labs") plot(c(gt), win)
If col
is a metadata column of the GRanges
or GRangesList
used to construct a gTrack and contains colors (either in hexadecimal form or as character vectors) then these values determine the color of the plotted point. Here is an example, where points within 10 Kbp of a junction breakend are colored in red.
coverage.gr = readRDS(system.file("extdata", "ovcar.subgraph.coverage.rds", package = "gTrack")) gg = readRDS(system.file("extdata", "ovcar.subgraph.rds", package = "gTrack")) values(coverage.gr)[, "near_breakend"] = ifelse(coverage.gr %^% (stack(gg$junctions[type == "ALT"]$grl) + 1e4), "yes", "no") values(coverage.gr)[, "col"] = ifelse(values(coverage.gr)[, "near_breakend"] == "yes", "red", "black") coverage.col.gt = gTrack(coverage.gr, y.field = "cn", circles = TRUE, lwd.border = 0.2, y0 = 0, y1 = 12) fp = parse.gr("1:6043576-7172800") plot(c(coverage.col.gt, gg$gt), fp + 1e5)
We can also map discrete values in a metadata column in to colors automatically. Here is one example, using values in near_breakend
. Here, gr.colorfield
is set to "near_breakend"
indicating that the gTrack
should color points according to their value in this column. For GRangesList
the analogous parameter grl.colorfield
should be modified.
coverage.col.gt = gTrack(coverage.gr, y.field = "cn", circles = TRUE, lwd.border = 0.2, y0 = 0, y1 = 12, gr.colorfield = "near_breakend") fp = parse.gr("1:6043576-7172800") plot(c(coverage.col.gt, gg$gt), fp + 1e5)
When using gr.colorfield
we can also supply a custom map of labels to colors by passing a named vector to colormap
. Here is one illustrative example.
coverage.col.gt = gTrack(coverage.gr, y.field = "cn", circles = TRUE, lwd.border = 0.2, y0 = 0, y1 = 12, gr.colorfield = "near_breakend", colormap = c("yes" = "red", "no" = "blue")) fp = parse.gr("1:6043576-7172800") plot(c(coverage.col.gt, gg$gt), fp + 1e5)
We can change the background color of our gTrack using the bg.col
param. Here is an example where the background is set to blue.
coverage.col.gt = gTrack(coverage.gr, y.field = "cn", circles = TRUE, lwd.border = 0.2, y0 = 0, y1 = 12, col = "black", bg.col = alpha("blue", 0.1)) fp = parse.gr("1:6043576-7172800") plot(c(coverage.col.gt, gg$gt), fp + 1e5)
When plotting matrix
and gMatrix
heatmaps it is sometimes useful to set thresholds for mapping numerical values to the color gradient. cmap.min
is the minimum number, under which the gradient is not applied, and cmap.max
is the maximum number to which the gradient is applied. Below, I plot two examples, with different ranges for these parameters.
gm = readRDS(system.file("extdata", "ovcar.subgraph.hic.rds", package = "gTrack")) fp = parse.gr("1:6043576-7172800") plot(c(gm$gtrack(cmap.min = 0, cmap.max = 1000, name = "wide"), gm$gtrack(cmap.min = 200, cmap.max = 300, name = "narrow")), fp + 1e5)
In some of the examples above, you can see that when we use gr.colorfield
or grl.colorfield
a legend is created to show the mapping of labels to colors. Sometimes, we don't want to include a legend in our gTrack
. Omitting the legend is accomplished by setting the parameter legend
to FALSE
.
coverage.gr = readRDS(system.file("extdata", "ovcar.subgraph.coverage.rds", package = "gTrack")) gg = readRDS(system.file("extdata", "ovcar.subgraph.rds", package = "gTrack")) values(coverage.gr)[, "near_breakend"] = ifelse(coverage.gr %^% (stack(gg$junctions[type == "ALT"]$grl) + 1e4), "yes", "no") coverage.col.gt = gTrack(coverage.gr, y.field = "cn", circles = TRUE, lwd.border = 0.2, y0 = 0, y1 = 12, gr.colorfield = "near_breakend") coverage.col.gt$legend = FALSE fp = parse.gr("1:6043576-7172800") plot(c(coverage.col.gt, gg$gt), fp + 1e5)
It is possible to plot aberrant adjacencies as a separate track. These must be supplied to the as a GRangesList
to the links
parameter of plot
. The length of each constituent GRanges
in this GRangesList
should be 2.
gg = readRDS(system.file("extdata", "ovcar.subgraph.rds", package = "gTrack")) ## create GRangesList corresponding with ALT edges grl = gg$junctions[type == "ALT"]$grl plot(c(coverage.gt, gg$gt), fp + 1e5, links = grl)
Some genome assemblies (e.g. GrCh38) have sequence names with a chr
prefix. By default, gTrack
strips these prefixes, but sometimes it is preferable to keep them. This can be done by setting chr.sub
to FALSE
in both plot
and gTrack
instantiation. An example is below.
coverage.new = readRDS(system.file("extdata", "ovcar.subgraph.coverage.chr.rds", package = "gTrack")) gg.new = readRDS(system.file("extdata", "ovcar.subgraph.chr.rds", package = "gTrack")) chr.fp = gUtils::parse.gr("chr1:6043576-7172800") gg.gt = gg.new$gtrack(chr.sub = FALSE, y.field = "cn") gg.gt$y.field = "cn" chr.coverage.gt = gTrack(coverage.new, y.field = "cn", circles = TRUE, lwd.border = 0.2, chr.sub = FALSE) grl = gg.new$junctions[type == "ALT"]$grl plot(c(chr.coverage.gt, gg.gt), chr.fp + 1e5, links = grl, chr.sub = FALSE)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.