Skip to contents

ggforge 2.0.0

All-Science Expansion

29 new plot functions across 6 new categories, expanding coverage from biomedical-only to all scientific disciplines (physics, chemistry, earth science, ecology, economics, engineering, data science).

New Categories & Functions

Earth & Environmental (4 functions): * ContourPlot(): 2D contour / filled contour for scalar fields * TernaryPlot(): Ternary (simplex) diagrams for compositional data * PolarPlot() / WindRosePlot(): Polar coordinate plots for angular data * MapPlot(): Geographic choropleth and point maps

Meta-Analysis & Agreement (3 functions): * ForestPlot(): General-purpose forest plot (OR/RR/SMD/HR) with diamond summaries * FunnelPlot(): Publication bias funnel plot with Egger’s line * BlandAltmanPlot(): Method agreement plot with limits of agreement

Ecology & Evolution (3 functions): * OrdinationPlot(): NMDS/PCoA/RDA biplot with arrows and ellipses * PhyloTreePlot(): Phylogenetic tree (rectangular/circular/fan) * RankAbundancePlot(): Species rank-abundance (Whittaker) curve

Physics & Engineering (2 functions): * QuiverPlot(): Vector field (quiver/arrow) plots * StreamlinePlot(): Flow field streamline visualization

3D & Interactive (3 functions): * Scatter3D(): General-purpose 3D scatter plot (plotly) * Surface3D(): 3D surface/wireframe plot (plotly) * ggforge_interactive(): Universal ggplot-to-plotly converter

Machine Learning (1 function): * ConfusionMatrixPlot(): Confusion matrix heatmap with accuracy annotation

Expanded Existing Categories

Statistical Plots (+6): * DumbbellPlot(): Before/after paired comparison * StreamGraph(): Symmetric river/stream chart * TreemapPlot(): Hierarchical rectangular treemap * ParallelCoordPlot(): Parallel coordinates for multivariate data * WafflePlot(): Waffle (square pie) chart * TimelinePlot(): Timeline/Gantt chart

Clinical & Prediction (renamed from Survival & Clinical, +3): * NomogramPlot(): Clinical prediction nomogram * CalibrationPlot(): Model calibration curve * DecisionCurvePlot(): Decision curve analysis (DCA)

Single-Cell & Spatial (+2): * TrajectoryPlot(): Pseudotime trajectory on dimension reduction * StackedViolinPlot(): Stacked violins for multi-feature markers

Specialized Plots (+2): * DendrogramPlot(): Standalone hierarchical clustering dendrogram * SunburstPlot(): Hierarchical sunburst chart (plotly)

Summary

  • 48 → 77 exported plot functions
  • 7 → 13 gallery categories
  • 11 new optional dependencies (all in Suggests)

ggforge 1.3.0

Code Quality

  • Modernized error handling: All stop(), warning(), and message() calls migrated to cli::cli_abort(), cli::cli_warn(), and cli::cli_inform() across all 44 source files (~250 calls). Errors now feature structured formatting with cli markup.

  • Eliminated fragile code: Replaced getFromNamespace("modify_list", "ggplot2") with utils::modifyList() in JitterPlot and Network.

  • Unified sort_x API: JitterPlot now uses the same expression-based sorting as BoxPlot/ViolinPlot, with full backward compatibility for legacy enum values.

Documentation

  • Cross-references: Added @family tags to all 55 exported functions and @seealso tags for 24 closely related function pairs.

  • New vignettes: Added “Plot Gallery” and “Advanced Customization” vignettes.

  • README improvements: Updated badges (Codecov, lifecycle: stable), corrected package description, synchronized version information.

  • pkgdown site: Added new vignettes to navbar, added BeeswarmPlot and CorPairsPlot to reference index.

Testing

  • Visual regression tests: Added vdiffr snapshot tests for 8 core plot types.

  • Cleaned up test artifacts: Removed 35 debugging test extracts from tests/testthat/_problems/.

CI/CD

  • Expanded CI matrix: Added R-devel and R-oldrel on Ubuntu to GitHub Actions R CMD check.

  • Coverage reporting: Added test-coverage.yaml workflow for Codecov integration.

Community

  • Contributing guide: Added .github/CONTRIBUTING.md.

  • Code of Conduct: Added Contributor Covenant v2.1.

  • Issue templates: Added bug report and feature request templates.

Dependencies

  • Added cli to Imports.
  • Added covr, vdiffr, spelling, and lifecycle to Suggests.

ggforge 1.2.0

New Features

  • BeeswarmPlot: New plot type integrated into BoxPlot/ViolinPlot system. add_beeswarm = TRUE replaces jittered points with beeswarm layout using ggbeeswarm. Exported BeeswarmPlot() convenience wrapper.

  • DimPlot 3D: Support for 3-dimensional reduction plots using plotly. Pass dims = 1:3 to get interactive 3D scatter plots.

  • CorPairsPlot: New pairwise correlation matrix plot with scatter plots, correlation coefficients, and configurable diagonal panels (density/histogram).

  • Heatmap rows_orderby/columns_orderby: New parameters to order heatmap rows and columns by data columns or expressions, overriding clustering.

  • sort_x expression support: BoxPlot/ViolinPlot sort_x now accepts arbitrary R expressions (e.g. "sd(y)", "max(y) - min(y)") in addition to the legacy enum values.

  • Tableau color palettes: Added 10 Tableau palette families to palette_list.

Architecture Improvements

  • Centralized calculate_plot_dimensions(): Unified dimension calculation helper replaces ~27 ad-hoc implementations across plot functions. Consistent legend space, content scaling, and aspect ratio handling.

  • keep_na/keep_empty framework: New check_keep_na(), check_keep_empty(), and process_keep_na_empty() helpers provide centralized NA and empty factor level handling. Supports per-column control via named lists. Integrated into build_plot() for automatic pre-split processing.

Bug Fixes

  • AreaPlot/TrendPlot: Fixed missing group combinations causing incorrect stacked area interpolation. Now completes across all x * group_by * facet_by combinations.

  • ggplot2 v4 compatibility: Fixed JitterPlot position_jitterdodge() when no dodge aesthetic exists. Fixed VelocityPlot arrow length handling for ggplot2 >= 4.0.

Dependencies

  • Added ggbeeswarm and plotly to Suggests.

ggforge 1.1.0

Architecture Improvements

  • Eliminated double split_by validation: build_plot() is now the single source of truth for split_by validation. Removed redundant validation from ~25 wrapper functions, reducing unnecessary computation and potential inconsistencies.

  • Centralized wrapper parameter cleanup in build_plot(): Wrapper-only

    parameters (split_by, split_by_sep, combine, nrow, ncol, byrow, axes, axis_titles, guides, design, seed) are now automatically cleaned before being passed to atomic plotting functions, preventing parameter leakage to ggplot2 layers.

  • Theme system now references style specifications: .build_common_theme_args() in 03-themes.R now derives all font sizes, faces, and colors from .ggforge_style_specs in 00-specs.R, ensuring a single source of truth for all visual specifications.

Code Quality

  • Removed dead code: apply_column_update() was a no-op backward compatibility shim that has been removed along with its call site in build_plot().

  • Fixed internal palette_list access: Replaced ggforge::palette_list self-reference with a proper internal accessor .get_palette_list() that works correctly in both installed and development (devtools::load_all()) modes.

  • Added testthat test infrastructure: Introduced proper testthat (edition 3) test suite with 80+ unit tests covering:

    • Parameter validation (test-validator.R)
    • Variable type detection (test-types.R)
    • Style specifications system (test-specs.R)
    • Theme system (test-themes.R)
    • Color palette system (test-palettes.R)
    • Plot builder workflow (test-build-plot.R)
    • Utility functions (test-utils.R)
    • Configuration system (test-config.R)
    • End-to-end plot smoke tests (test-plots-smoke.R)
  • Added NEWS.md for tracking changes across versions.

ggforge 1.0.1

  • Initial CRAN-ready release with 48 plotting functions.