Ridgeline chart (joy plot) — pure SVG, zero JS.
Renders multiple overlapping density distributions stacked vertically. Each row shows a Gaussian KDE of the given values. Useful for comparing distributions across categories.
Examples
<.ridgeline_chart data={[
%{label: "Group A", values: [1, 2, 3, 3, 4, 5, 5, 5, 6, 7]},
%{label: "Group B", values: [3, 4, 5, 5, 6, 7, 7, 8, 9, 10]},
%{label: "Group C", values: [0, 1, 1, 2, 2, 3, 4, 5, 6, 8]}
]} />
<.ridgeline_chart
data={[%{label: "2024", values: [...]}, %{label: "2025", values: [...]}]}
overlap={0.6}
fill_opacity={0.5}
/>
Summary
Functions
Attributes
data(:list) - Distribution data:[%{label, values: [numbers]}]. Defaults to[].colors(:list) - Override default palette. CSS color strings. Defaults to[].overlap(:float) - Overlap factor between distributions (0-1). Defaults to0.5.fill_opacity(:float) - Fill opacity for density areas. Defaults to0.6.resolution(:integer) - Number of KDE evaluation points. Defaults to50.bandwidth(:any) - KDE bandwidth (nil for Silverman's rule). Defaults tonil.animate(:boolean) - Enable entrance animations. Defaults totrue.animation_duration(:integer) - Animation duration in ms. Defaults to800.show_labels(:boolean) - Show row labels. Defaults totrue.theme(:map) - Chart theme overrides (see ChartTheme). Defaults to%{}.id(:string) - Unique ID for the chart (auto-generated if not provided). Defaults tonil.title(:string) - Chart title rendered above the visualization. Defaults tonil.description(:string) - Chart description for context (rendered below title). Defaults tonil.class(:string) - Defaults tonil.- Global attributes are accepted.