First tagged release of vellumplot — a declarative, pipe-first grammar of graphics that compiles an inspectable, serializable spec into a vellum vector scene and renders it. It runs without a graphics device (vellum measures text itself), and the compiled plot is the scene, so the static figure and the interactive widget cannot drift.
Things that are a little unusual to find together in one R grammar:
- One spec → PNG / SVG / PDF from one solved layout, and the PDF is tagged (a real structure tree + alt text a screen reader can navigate).
- Checkable accessibility —
plot_lint()flags tiny text, low contrast, and single-level legends; render through a colour-vision-deficiency simulation (render(cvd = )) to preview a colour-blind reader's view. - Interactive HTML widgets (vellumwidget) that reuse the marks you declared — no
*_interactive()twins, no Vega/plotly re-draw. - Vector-preserving effects and regions — real Gaussian-blur
glow()/shadow()(including on text), and Venn/Euler diagrams and merged choropleths computed as boolean geometry so they stay crisp in PDF. - Texture as well as hue —
pattern_*()hatch fills that survive greyscale print and colour-vision deficiency, on every backend. - Keyframe animation —
transition_states()/animate()/anim_save()to GIF, APNG, or a resolution-independent animated SVG (honoursprefers-reduced-motion). - A native hand-drawn mode (
theme_sketch()), exact and identical across PNG/SVG/PDF.
Also included: the full mark/scale/facet/coord grammar, statistical marks, spatial (sf / coord_sf) and network (igraph, sankey, hierarchies, chord) plots, multi-page PDF (pdf_pages()) and parallel batch (render_all()) output, repelled labels, SVG icon markers, and multi-plot composition.
Install:
pak::pak("r-vellum/vellumplot")Needs the vellum backend (a Rust toolchain; pak pulls it in).