The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
This vignette walks through glyph’s grammar with live, interactive
output. Every plot below is a real glyph_spec built with
the package and rendered to an actual D3-backed htmlwidget — not a
screenshot. Hover, click, brush, and zoom them right here in the
page.
One thing worth knowing up front: printing a glyph_spec
at the console auto-renders it (like a ggplot2 plot), but that
auto-render only fires in an interactive R session. Inside a vignette or
pkgdown article the code runs non-interactively, so each example below
ends the pipeline with an explicit render()
call to produce the widget.
All examples use mtcars so you can copy-paste and run
them yourself.
Interactivity is grammar, not glue. interact()
turns on tooltips and a hover effect right where the plot is built, and
titles()
adds a title in the same pipe — no ggplotly() conversion
step, no lost formatting.
glyph(mtcars, x = wt, y = mpg) |>
mark_point(color = cyl) |>
interact(tooltip = TRUE, hover = "enlarge") |>
titles(title = "Motor Trend Cars") |>
render()Hover over a point to see it enlarge; pause on it to see the tooltip.
animate()
declares a transition as part of the spec. stagger offsets
each bar’s entrance animation so they draw in sequence rather than all
at once.
glyph(mtcars, x = cyl, y = mpg) |>
mark_bar() |>
animate(transition = "slide", stagger = 50) |>
render()Reload this page (or re-run the chunk in an R session) to see the bars slide in.
Instead of ggplot2’s dozens of individual theme()
arguments, theme_tokens()
takes a small preset (or individual tokens like bg,
font, accent) and cascades foreground, grid,
and title colors automatically for contrast.
mark_text()
draws a label per point, and smart_repel = TRUE nudges
overlapping labels apart so they stay readable — a first-class feature
instead of a separate ggrepel dependency.
mtcars stores car names as row names, so we promote them to
a real column first.
compose()
arranges multiple glyph_spec objects into a single layout —
here, two scatterplots side by side — without reaching for
patchwork or cowplot. With
interact(brush = TRUE) on each panel and
linked_selections = TRUE on the composed layout, brushing
points in one panel highlights the same rows in the other.
p1 <- glyph(mtcars, x = wt, y = mpg) |>
mark_point(color = cyl) |>
interact(brush = TRUE)
p2 <- glyph(mtcars, x = hp, y = mpg) |>
mark_point(color = cyl) |>
interact(brush = TRUE)
compose(p1, p2, type = "hstack", linked_selections = TRUE) |>
render()Drag a rectangle over a few points in either panel — the corresponding cars highlight in both.
facet()
splits a plot into small multiples by one or two variables, each with
its own panel — like ggplot2’s facet_wrap(), built into the
same pipeline instead of a separate layer.
marginals()
adds histograms, density curves, or boxplots along the axes — a common
pattern that normally needs ggExtra or manual grid
manipulation in ggplot2.
inset()
places a second, smaller glyph_spec inside a corner of the main plot —
useful for a detail view or a different breakdown of the same data,
without any manual viewport math.
animate(by = ..., transition = "morph") cycles the plot
through subsets of the data grouped by a field, transitioning marks
smoothly between states — similar in spirit to
gganimate::transition_states(), but with a built-in
play/pause control and no rendering-to-GIF step.
glyph(mtcars, x = wt, y = mpg) |>
mark_point(size = hp, color = cyl) |>
animate(by = gear, transition = "morph", duration = 800) |>
render()Use the play/pause button to step through each gear
group.
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.