← Back to all sparks
G

ggplot2

ANALYTICS
Velocity0.0

Declarative graphics system for R

ggplot2 swapped its object system out from under a decade of downstream code

rvisualizations7-migrationthemingbreaking-changes
Current state
The 4.0.0 release replaced ggplot2's S3 internals with S7 and made every geom's defaults settable from the theme, both breaking changes. The three releases since have been hotfixes cleaning up the fallout - regressions in geom_area(), position_stack() and the scale and guide systems - plus rlang interoperability repairs. The one genuinely new feature in that window is a quantile.type argument on boxplots.
Where it's heading
This is the tail of a long-telegraphed migration: 3.5.2 existed largely to give downstream packages the is_*() predicates and accessor functions they would need before 4.0 landed. With theme(geom) and from_theme(), styling is consolidating into the theme rather than being repeated per layer, which is the direction the extension ecosystem now has to follow.
Prediction
Expect further 4.0.x patches as S7-related regressions surface in extension packages, and more of the per-geom default surface to migrate into element_geom(). The entries give no indication of a 4.1 feature line yet.

Recent moves

  1. 3mo ago

    Boxplots gain a quantile.type argument for SAS parity

    A hotfix that also lands a real feature: geom_boxplot() and stat_boxplot() gain a quantile.type argument controlling the percentile definition for hinges and median, with the option to match SAS's default directly.

    View source ↗
  2. 6mo ago

    Interoperability fix across rlang versions

    A one-line interoperability fix so make_constructor() no longer captures rlang::list2() at build time, letting ggplot2 work across rlang versions. Invisible to plotting code.

    View source ↗
  3. 9mo ago

    Regression cleanup after the 4.0 rewrite

    The first cleanup pass after 4.0.0, fixing regressions across geom_area(), position_stack(), stat_bin(), legend keys and scale labels. geom_text() and geom_label() also start accepting expressions as the label aesthetic.

    View source ↗
  4. 11mo ago

    ggplot2 4.0 replaces S3 internals with S7

    ⚡ SPARK

    The release the previous year of infrastructure work was pointed at: S3 internals replaced with S7, geom defaults moved into the theme, and geom_violin() switched to real data-based quantiles. Everything since has been cleanup from it.

    View source ↗
  5. 1y ago

    Standardised class predicates to prepare packages for 4.0

    A deliberately small release whose purpose was preparing other packages for 4.0: standardised is_*() predicates for every core class, plus get_labs() and get_geom_defaults() accessors. Migration scaffolding rather than user-facing features.

    View source ↗
  6. 2y ago

    Patterns and gradients in geom_sf, resolution() reverted

    Cleans up regressions from 3.5.0, including reverting the resolution() default behaviour behind a new discrete argument, and enables patterns and gradients in geom_sf(). Ordinary patch-cycle work well before the 4.0 push.

    View source ↗