Skip to contents
library(ezGenomeTracks)
#> Warning: replacing previous import 'AnnotationDbi::select' by 'dplyr::select'
#> when loading 'ezGenomeTracks'
#> ezGenomeTracks v0.0.13
#> Easy and flexible genomic track visualization
#> Use citation('ezGenomeTracks') to see how to cite this package
#> For documentation and examples, visit: https://github.com/zmu/ezGenomeTracks
library(ggplot2)

The most common use of genome browser tracks is to plot coverage of sequencing data. In most cases, we have a bigwig file and a particular region that we want to plot. This is also one of the most basic situation for using ezGenomeTracks.

Load example data

bw0 <- system.file(
  "extdata",
  "avg_chr2-231091223_231109786_231113600_0.bw",
  package = "ezGenomeTracks"
)
bw1 <- system.file(
  "extdata",
  "avg_chr2-231091223_231109786_231113600_1.bw",
  package = "ezGenomeTracks"
)
bw2 <- system.file(
  "extdata",
  "avg_chr2-231091223_231109786_231113600_2.bw",
  package = "ezGenomeTracks"
)

Use ez_coverage function

Plot a single coverage track

ez_coverage(
  input = bw0,
  region = "chr2:231109000-231115000"
)

Note that ez_coverage, like all other ez_* wrappers, automatically convert the x-axis to readable scales.

Plot stacked coverage tracks

To plot stacked tracks, use a list() for input to ez_coverage.

ez_coverage(
  input = list(bw0, bw1, bw2),
  region = "chr2:231109000-231115000",
  y_axis_style = "full"
)


ez_coverage(
  input = list(bw0, bw1, bw2),
  region = "chr2:231109000-231115000",
  y_axis_style = "full",
  colors = c("blue2", "orange2", "purple2"),
  alpha = 1,
  track_labels = c("AA", "AG", "GG")
)

There are two notable things in the above examples. First, we can use show_legend = T add legends back. Second, the stacked tracks are implemented as facets in ggplot2, we can use facet_label_position = "left" to put it on the left of the tracks.

Plot overlapping coverage tracks

In some cases, we want to plot overlapping tracks to compare coverage heights. To do so, use a vector for input to ez_coverage.

ez_coverage(
  input = c(bw0, bw1, bw2),
  region = "chr2:231109000-231115000",
  type = "area",
  y_axis_style = "none",
  y_range = c(0, 100),
  colors = c("blue2", "orange2", "purple2"),
  alpha = 1,
  track_labels = c("AA", "AG", "GG"),
  facet_label_position = "left",
  show.legend = F
)

In this way, it is clear that the second exon in this plot showed differential usage across the three genotypes.

Averaging signals across samples

In some cases it is desirable to average signal across multiple samples, such as across donors with the same genotype.

ez_coverage(
  input = c(bw0, bw1, bw2),
  region = "chr2:231109000-231115000",
  type = "line",
  average_bin_width = 5,
  average = T,
  y_axis_style = "full",
  facet_label_position = "left",
  show.legend = F
)

Changing the looks of coverage track

Set y-axis range to all tracks, but hiding y-axis labels.

ez_coverage(
  input = list(bw0, bw1, bw2),
  region = "chr2:231109000-231115000",
  y_axis_style = "none",
  colors = c("blue2", "orange2", "purple2"),
  alpha = 1,
  track_labels = c("AA", "AG", "GG"),
  facet_label_position = "left",
  y_range = c(0, 100)
)

Add border around tracks.

ez_coverage(
  input = list(bw0, bw1, bw2),
  region = "chr2:231109000-231115000",
  y_axis_style = "none",
  y_range = c(0, 100),
  colors = c("blue2", "orange2", "purple2"),
  alpha = 1,
  track_labels = c("AA", "AG", "GG"),
  facet_label_position = "left",
  border = T
)

Draw lines for coverage.

ez_coverage(
  input = c(bw0, bw1, bw2),
  region = "chr2:231109000-231115000",
  type = "line",
  y_axis_style = "none",
  y_range = c(0, 100),
  colors = c("blue2", "orange2", "purple2"),
  alpha = 1,
  track_labels = c("AA", "AG", "GG"),
  facet_label_position = "left",
  show_legend = T
)

Change y-axis style.

ez_coverage(
  input = list(bw0, bw1, bw2),
  region = "chr2:231109000-231115000",
  y_axis_style = "simple",
  colors = c("blue2", "orange2", "purple2"),
  alpha = 1,
  track_labels = c("AA", "AG", "GG")
)


ez_coverage(
  input = list(bw0, bw1, bw2),
  region = "chr2:231109000-231115000",
  y_axis_style = "minmax",
  colors = c("blue2", "orange2", "purple2"),
  alpha = 1,
  track_labels = c("AA", "AG", "GG")
)


ez_coverage(
  input = list(bw0, bw1, bw2),
  region = "chr2:231109000-231115000",
  y_axis_style = "none",
  colors = c("blue2", "orange2", "purple2"),
  alpha = 1,
  track_labels = c("AA", "AG", "GG")
)

Use geom_coverage function

For advanced users that hope to do more customization with the plots, geom_coverage can be directly used with ggplot calls.

bw0_cov <- rtracklayer::import(bw0) |>
  granges_to_df()

head(bw0_cov)
#>   seqnames     start       end width strand    score
#> 1     chr2 231106786 231106787     1      * 11.65226
#> 2     chr2 231106787 231106788     1      * 11.65226
#> 3     chr2 231106788 231106789     1      * 11.65226
#> 4     chr2 231106789 231106790     1      * 11.65226
#> 5     chr2 231106790 231106791     1      * 12.09351
#> 6     chr2 231106791 231106792     1      * 12.09351
ggplot(bw0_cov) +
  geom_coverage()

As shown above, geom_coverage automatically looks for default columns need to plot coverage data, but more code are needed to make the plot look like what ez_coverage outputs.