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
.
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.
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.
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.
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.
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)