Package ‘patchwork’

Operators defined in package ‘patchwork’ can be used to combine multiple plots created with package ‘ggplot2’ or extensions to it, such as my own ‘ggpmisc’ and ‘ggspectra’. (The site ggplot2 extensions showcases at the moment more than 40 extensions to ‘ggplot2’.)

Package ‘patchwork’ has been developed by Thomas Lin Pedersen, and being relatively new, it is not yet in CRAN. It can be installed from the public Git repository at Github.

# install.packages("devtools")
devtools::install_github("thomasp85/patchwork")

The ‘ggplot2’ package provides a strong API for sequentially building up a plot, but does not concern itself with composition of multiple plots. ‘patchwork’ is a package that expands the API to allow for arbitrarily complex composition of plots by providing mathmatical operators for combining multiple plots. Other packages that address this need (but with a different approach) are ‘gridExtra’ and ‘cowplot’.

From the package’s DESCRIPTION.

Package ‘ggspectra’ provides function multiplot() for this purpose, but this function is minimalistic, with its most important handicap in its inability to independently align the plotting areas and axis labels of the composed plots.

An example using the operators / and & from ‘patchwork’ follows.

library(ggspectra)
library(patchwork)
p <- autoplot(sun.spct) / 
  autoplot(polyester.spct, range = c(280, 800)) / 
  autoplot(sun.spct * polyester.spct)
png("three-plots.png", height = 800, width = 600)
print(p) & theme_bw()
dev.off()

ggpmisc 0.3.0

A major update to ‘ggpmisc’ (0.3.0) follows availability of the update of ‘ggplot2’ (3.0.0) (see release announcement) and the release of the new package ‘gginnards’ (0.0.1) (see announcement) through CRAN. Package documentation is available at https://docs.r4photobiology.info/ggpmisc/ as a web site.

Functions earlier included in ‘ggpmisc’ (< 0.3.0) related to debugging and low level manipulation of ggplot objects have been moved to package ‘gginnards’. The functions that remain in ‘ggpmisc’ (>= 0.3.0) are related to annotation of plots with fitted-model equations, fit diagnosis, ANOVA and summary tables, highlighting and labelling of peaks and valleys in curves, and local density-based highlighting or labelling in scatter plots.  Additionally specializations of the ggplot() constructor allow on-the-fly conversion of time-series and geom_table() makes it possible to add tables to plots respecting the the Grammar of Graphics paradigm.

The enhancements in this update to ‘ggpmisc’ are made possible by changes to ‘ggplot2’ (>= 3.0.0) made while adding support for sf (simple features). Not all extensions to ‘ggplot2’ have been updated yet to be compatible with the new version of ‘ggplot2’ so if you need them, you may need to wait before updating to ‘ggplot2’ (3.0.0) and consequently also before updating to this version of ‘ggpmisc’.

This time I include some example plots taken from the documentation of the package. In all cases annotations are generated automatically, but formatting is flexible. Larger plots are linked to the thumbnails.

Main changes since ‘ggpmisc’ (0.2.17) the previous CRAN release.

  • Add geom_table() a geom for adding a layer containing one or more tables to a plot panel.
  • Add stat_fit_tb() a stat that computes a tidy tabular version of the summary table or ANOVA table from a model fit.
  • Add support for "weight" aesthetic in stat_poly_eq() so that weights can be passed to lm() (fixing bug reported by S.Al-Khalidi).
  • Add support for column selection and renaming to stat_fit_tb().
  • Add new statistic stat_fmt_tb() for formatting of tibbles for addition to plots as tables.
  • Rename stat_quadrat_count() into stat_quadrant_count() (fix miss-spelling).
  • Move debug stats and geoms to package ‘gginnards’.
  • Move plot layer manipulation functions to package ‘gginnards’.
  • Revise vignettes.

NOTE: The new version of ‘ggpmisc’ is on its way to CRAN and should be available for download later in the week.