hd_make: Build a Figure from a Specification

View source: R/make-figure.R

hd_makeR Documentation

Build a Figure from a Specification

Description

Renders a hd_spec and hd_opts pair using the selected mode and geometry. This is the central function of the package - everything else feeds into or flows out of hd_make().

Usage

hd_make(
  spec,
  type = "column",
  opts = NULL,
  mode = NULL,
  backend = lifecycle::deprecated(),
  use_js = TRUE,
  module = FALSE,
  ...
)

Arguments

spec

A hd_spec object from hd_spec().

type

Character. Geometry name - one of list_geoms(): "column", "line", "scatter", "arearange", "pie", or any custom geometry added with register_geom().

opts

A hd_opts object or NULL (uses all defaults). Controls title, subtitle, caption, ylim, yint, flip, per-figure colours, and highcharter theme.

mode

Character. Rendering mode - "dynamic" (default, interactive) or "static". "dynamic" uses the highcharter backend, "static" uses the ggplot2 backend and others. See list_modes().

backend

Character. Rendering engine - "dynamic" (default, interactive) or "static", or any engine added with register_backend(). Falls back to getOption("highdir.backend", "dynamic"). This will deprecated in favor of mode in a future release.

use_js

Logical. When TRUE (default) injects a hover-band htmlwidgets::JS() callback via point.events.mouseOver/Out. Tooltips, accessibility module, and all other Highcharts declarative features are always present. Set FALSE for clean, no-custom-JS widgets. Ignored by the ggplot2 backend.

module

Use available modules js from CDN https://api.highcharts.com/highcharts/

...

Extra arguments forwarded to the geometry function. Required arguments (e.g. ymin, ymax for "arearange") must be supplied here.

Value

A highchart widget (highcharter backend) or ggplot object (ggplot2 backend), invisibly wrapped so knitr/Shiny render it automatically.

Workflow

spec <- hd_spec(df, x = "age", y = "pct", group = "sex", n = "n")
opts <- hd_opts(title = "Health survey", ylim = c(0, 80))

hd_make(spec, "column", opts)                       # highcharter (default)
hd_make(spec, "column", opts, mode = "static")      # static ggplot2
hd_make(spec, "line",   opts, smooth = TRUE)        # smooth spline
hd_make(spec, "pie",    opts)                       # pie / donut

See Also

hd_spec(), hd_opts(), hd_save(), hd_set_theme(), list_geoms(), list_modes(), hd_app()

Examples

df <- data.frame(
  age = rep(c("18-24", "25-34", "35-44", "45-54"), each = 2),
  sex = rep(c("Male", "Female"), 4),
  pct = c(42, 38, 55, 61, 48, 52, 60, 57),
  n   = c(120, 115, 200, 210, 180, 175, 160, 155)
)

spec <- hd_spec(df, x = "age", y = "pct", group = "sex", n = "n")

opts <- hd_opts(title    = "Health survey results",
                 subtitle = "Source: FHI 2024",
                 ylim     = c(0, 80))


# -- Interactive charts (highcharter) --------------------------------------
hd_make(spec, "column", opts)
hd_make(spec, "line",   opts, smooth = TRUE)
hd_make(spec, "line",   opts, smooth = FALSE, dot_size = 6)
hd_make(spec, "scatter")

# Pie chart - group is ignored; x = label, y = value
pie_df   <- data.frame(category = c("A","B","C","D"),
                        value    = c(35, 25, 20, 20))
pie_spec <- hd_spec(pie_df, x = "category", y = "value")
pie_opts <- hd_opts(title = "Share by category")
hd_make(pie_spec, "pie", pie_opts)
hd_make(pie_spec, "pie", pie_opts, inner_size = "50%")  # donut

# Arearange - requires ymin + ymax in ...
df2   <- cbind(df, lo = df$pct - 5, hi = df$pct + 5)
spec2 <- hd_spec(df2, "age", "pct", group = "sex")
hd_make(spec2, "arearange", opts, ymin = "lo", ymax = "hi")

# -- Disable JS hover band -------------------------------------------------
hd_make(spec, "column", opts, use_js = FALSE)

# -- Static ggplot2 versions -----------------------------------------------
hd_make(spec, "column",  opts, mode = "static")
hd_make(spec, "line",    opts, mode = "static")
hd_make(spec, "scatter", opts, mode = "static")
hd_make(pie_spec, "pie", pie_opts, mode = "static")

# -- Reuse spec with different presentation --------------------------------
opts_no <- hd_opts(title = "Helseundersøkelse", subtitle = "Alle aldre")
hd_make(spec, "column", opts_no)

# -- Save outputs ----------------------------------------------------------
## Not run: 
hd_save(hd_make(spec, "column", opts), "column.html")
hd_save(hd_make(spec, "column", opts, mode ="static"), "column.png")

## End(Not run)



highdir documentation built on July 31, 2026, 5:06 p.m.