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.