Introduction to plotgardener

Nicole Kramer, Eric S. Davis, Craig Wenger, Sarah Parker, Erika Deoudes, Michael Love, Douglas H. Phanstiel

Overview

plotgardener is a coordinate-based, genomic visualization package for R. Using grid graphics, plotgardener empowers users to programmatically and flexibly generate multi-panel figures. Tailored for genomics for a variety of genomic assemblies, plotgardener allows users to visualize large, complex genomic datasets while providing exquisite control over the arrangement of plots.

plotgardener functions can be grouped into the following categories:

Functions for creating plotgardener page layouts, drawing, showing, and hiding guides, as well as placing plots on the page. See The plotgardener Page

Functions for quickly reading in large biological datasets. See Reading Data for plotgardener

Contains genomic plotting functions, functions for placing ggplots and base plots, as well as functions for drawing simple shapes. See Plotting Multi-omic Data

Enables users to add annotations to their plots, such as legends, axes, and scales. See Plot Annotations

Functions that display plotgardener properties or operate on other plotgardener functions, or constructors for plotgardener objects. See plotgardener Meta Functions

This vignette provides a quick start guide for utilizing plotgardener. For in-depth demonstrations of plotgardener’s key features, see the additional articles. For detailed usage of each function, see the function-specific reference examples with ?function() (e.g. ?plotPairs()).

All the data included in this vignette can be found in the supplementary package plotgardenerData.

Quick plotting

plotgardener plotting functions contain 4 types of arguments:

  1. Data reading argument (data)

  2. Genomic locus arguments (chrom, chromstart, chromend, assembly)

  3. Placement arguments (x, y, width, height, just, default.units, …) that define where each plot resides on a page

  4. Attribute arguments that affect the data being plotted or the style of the plot (norm, fill, fontcolor, …) that vary between functions

The quickest way to plot data is to omit the placement arguments. This will generate a plotgardener plot that fills up the entire graphics window and cannot be annotated. These plots are only meant to be used for quick genomic data inspection and not as final plotgardener plots. The only arguments that are required are the data arguments and locus arguments. The examples below show how to quickly plot different types of genomic data with plot defaults and included data types. To use your own data, replace the data argument with either a path to the file or an R object as described above.

Hi-C matrices

## Load plotgardener
library(plotgardener)

## Load example Hi-C data
library(plotgardenerData)
data("IMR90_HiC_10kb")

## Quick plot Hi-C data
plotHicSquare(
    data = IMR90_HiC_10kb,
    chrom = "chr21", chromstart = 28000000, chromend = 30300000,
    assembly = "hg19"
)

Signal tracks

## Load plotgardener
library(plotgardener)

## Load example signal data
library(plotgardenerData)
data("IMR90_ChIP_H3K27ac_signal")

## Quick plot signal data
plotSignal(
    data = IMR90_ChIP_H3K27ac_signal,
    chrom = "chr21", chromstart = 28000000, chromend = 30300000,
    assembly = "hg19"
)

Gene tracks

## Load plotgardener
library(plotgardener)

## Load hg19 genomic annotation packages
library(TxDb.Hsapiens.UCSC.hg19.knownGene)
library(org.Hs.eg.db)

## Quick plot genes
plotGenes(
    assembly = "hg19",
    chrom = "chr21", chromstart = 28000000, chromend = 30300000
)

GWAS Manhattan plots

## Load plotgardener
library(plotgardener)

## Load hg19 genomic annotation packages
library(TxDb.Hsapiens.UCSC.hg19.knownGene)

## Load example GWAS data
library(plotgardenerData)
data("hg19_insulin_GWAS")

## Quick plot GWAS data
plotManhattan(
    data = hg19_insulin_GWAS, 
    assembly = "hg19",
    fill = c("steel blue", "grey"),
    ymax = 1.1, cex = 0.20
)

Plotting and annotating on the plotgardener page

To build complex, multi-panel plotgardener figures with annotations, we must:

  1. Create a plotgardener coordinate page with pageCreate().
pageCreate(width = 3.25, height = 3.25, default.units = "inches")

  1. Provide values for the placement arguments (x, y, width, height, just, default.units) in plotting functions and save the output of the plotting function.
data("IMR90_HiC_10kb")
hicPlot <- plotHicSquare(
    data = IMR90_HiC_10kb,
    chrom = "chr21", chromstart = 28000000, chromend = 30300000,
    assembly = "hg19",
    x = 0.25, y = 0.25, width = 2.5, height = 2.5, default.units = "inches"
)

  1. Annotate plotgardener plot objects by passing them into the plot argument of annotation functions.
annoHeatmapLegend(
    plot = hicPlot,
    x = 2.85, y = 0.25, width = 0.1, height = 1.25, default.units = "inches"
)

annoGenomeLabel(
    plot = hicPlot,
    x = 0.25, y = 2.75, width = 2.5, height = 0.25, default.units = "inches"
)

For more information about how to place plots and annotations on a plotgardener page, check out the section Working with plot objects.

Exporting plots

When a plotgardener plot is ready to be saved and exported, we can first remove all page guides that were made with pageCreate():

pageGuideHide()

We can then either use the Export toggle in the RStudio plot panel, or save the plot within our R code as follows:

pdf(width = 3.25, height = 3.25)

pageCreate(width = 3.25, height = 3.25, default.units = "inches")
data("IMR90_HiC_10kb")
hicPlot <- plotHicSquare(
    data = IMR90_HiC_10kb,
    chrom = "chr21", chromstart = 28000000, chromend = 30300000,
    assembly = "hg19",
    x = 0.25, y = 0.25, width = 2.5, height = 2.5, default.units = "inches"
)
annoHeatmapLegend(
    plot = hicPlot,
    x = 2.85, y = 0.25, width = 0.1, height = 1.25, default.units = "inches"
)

annoGenomeLabel(
    plot = hicPlot,
    x = 0.25, y = 2.75, width = 2.5, height = 0.25, default.units = "inches"
)
pageGuideHide()

dev.off()

Please note that due to the implementation of grid removal functions, using pageGuideHide within a pdf call will result in the rendering of a separate, new page with the plot guides removed. To avoid this artifact, hide guides in the pageCreate function call with showGuides = FALSE.

For more detailed usage and examples, please refer to the other available vignettes.

Future Directions

We still have many ideas to add for a second version of plotgardener including, but not limited to: grammar of graphics style plot arguments and plot building, templates, themes, and multi-plotting functions. If you have suggestions for ways we can improve plotgardener, please let us know!

Session Info

sessionInfo()
## R version 4.3.2 Patched (2023-11-13 r85521)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 22.04.3 LTS
## 
## Matrix products: default
## BLAS:   /home/biocbuild/bbs-3.18-bioc/R/lib/libRblas.so 
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.10.0
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=en_GB              LC_COLLATE=C              
##  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
##  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
## 
## time zone: America/New_York
## tzcode source: system (glibc)
## 
## attached base packages:
## [1] stats4    grid      stats     graphics  grDevices utils     datasets 
## [8] methods   base     
## 
## other attached packages:
##  [1] org.Hs.eg.db_3.18.0                    
##  [2] TxDb.Hsapiens.UCSC.hg19.knownGene_3.2.2
##  [3] GenomicFeatures_1.54.1                 
##  [4] AnnotationDbi_1.64.1                   
##  [5] Biobase_2.62.0                         
##  [6] GenomicRanges_1.54.1                   
##  [7] GenomeInfoDb_1.38.1                    
##  [8] IRanges_2.36.0                         
##  [9] S4Vectors_0.40.2                       
## [10] BiocGenerics_0.48.1                    
## [11] plotgardenerData_1.8.0                 
## [12] plotgardener_1.8.2                     
## 
## loaded via a namespace (and not attached):
##  [1] DBI_1.1.3                   bitops_1.0-7               
##  [3] biomaRt_2.58.0              rlang_1.1.2                
##  [5] magrittr_2.0.3              matrixStats_1.1.0          
##  [7] compiler_4.3.2              RSQLite_2.3.3              
##  [9] png_0.1-8                   vctrs_0.6.5                
## [11] stringr_1.5.1               pkgconfig_2.0.3            
## [13] crayon_1.5.2                fastmap_1.1.1              
## [15] dbplyr_2.4.0                XVector_0.42.0             
## [17] utf8_1.2.4                  Rsamtools_2.18.0           
## [19] rmarkdown_2.25              strawr_0.0.91              
## [21] purrr_1.0.2                 bit_4.0.5                  
## [23] xfun_0.41                   zlibbioc_1.48.0            
## [25] cachem_1.0.8                jsonlite_1.8.8             
## [27] progress_1.2.3              blob_1.2.4                 
## [29] highr_0.10                  DelayedArray_0.28.0        
## [31] BiocParallel_1.36.0         parallel_4.3.2             
## [33] prettyunits_1.2.0           R6_2.5.1                   
## [35] plyranges_1.22.0            bslib_0.6.1                
## [37] stringi_1.8.2               RColorBrewer_1.1-3         
## [39] rtracklayer_1.62.0          jquerylib_0.1.4            
## [41] Rcpp_1.0.11                 SummarizedExperiment_1.32.0
## [43] knitr_1.45                  Matrix_1.6-4               
## [45] tidyselect_1.2.0            abind_1.4-5                
## [47] yaml_2.3.7                  codetools_0.2-19           
## [49] curl_5.1.0                  lattice_0.22-5             
## [51] tibble_3.2.1                withr_2.5.2                
## [53] KEGGREST_1.42.0             evaluate_0.23              
## [55] gridGraphics_0.5-1          BiocFileCache_2.10.1       
## [57] xml2_1.3.6                  Biostrings_2.70.1          
## [59] pillar_1.9.0                filelock_1.0.2             
## [61] MatrixGenerics_1.14.0       generics_0.1.3             
## [63] RCurl_1.98-1.13             hms_1.1.3                  
## [65] ggplot2_3.4.4               munsell_0.5.0              
## [67] scales_1.3.0                glue_1.6.2                 
## [69] tools_4.3.2                 BiocIO_1.12.0              
## [71] data.table_1.14.8           GenomicAlignments_1.38.0   
## [73] fs_1.6.3                    XML_3.99-0.16              
## [75] colorspace_2.1-0            GenomeInfoDbData_1.2.11    
## [77] restfulr_0.0.15             cli_3.6.1                  
## [79] rappdirs_0.3.3              fansi_1.0.5                
## [81] S4Arrays_1.2.0              dplyr_1.1.4                
## [83] gtable_0.3.4                yulab.utils_0.1.0          
## [85] sass_0.4.8                  digest_0.6.33              
## [87] SparseArray_1.2.2           ggplotify_0.1.2            
## [89] rjson_0.2.21                memoise_2.0.1              
## [91] htmltools_0.5.7             lifecycle_1.0.4            
## [93] httr_1.4.7                  bit64_4.0.5