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)
ggforge 1.3.0
Code Quality
Modernized error handling: All
stop(),warning(), andmessage()calls migrated tocli::cli_abort(),cli::cli_warn(), andcli::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")withutils::modifyList()in JitterPlot and Network.Unified
sort_xAPI: JitterPlot now uses the same expression-based sorting as BoxPlot/ViolinPlot, with full backward compatibility for legacy enum values.
Documentation
Cross-references: Added
@familytags to all 55 exported functions and@seealsotags 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
vdiffrsnapshot 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.yamlworkflow for Codecov integration.
ggforge 1.2.0
New Features
BeeswarmPlot: New plot type integrated into BoxPlot/ViolinPlot system.
add_beeswarm = TRUEreplaces jittered points with beeswarm layout using ggbeeswarm. ExportedBeeswarmPlot()convenience wrapper.DimPlot 3D: Support for 3-dimensional reduction plots using plotly. Pass
dims = 1:3to 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_xexpression support: BoxPlot/ViolinPlotsort_xnow 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_emptyframework: Newcheck_keep_na(),check_keep_empty(), andprocess_keep_na_empty()helpers provide centralized NA and empty factor level handling. Supports per-column control via named lists. Integrated intobuild_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.
ggforge 1.1.0
Architecture Improvements
Eliminated double
split_byvalidation:build_plot()is now the single source of truth forsplit_byvalidation. Removed redundant validation from ~25 wrapper functions, reducing unnecessary computation and potential inconsistencies.-
Centralized wrapper parameter cleanup in
build_plot(): Wrapper-onlyparameters (
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()in03-themes.Rnow derives all font sizes, faces, and colors from.ggforge_style_specsin00-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 inbuild_plot().Fixed internal
palette_listaccess: Replacedggforge::palette_listself-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)
- Parameter validation (
Added
NEWS.mdfor tracking changes across versions.
