Repository navigation
Chart Catalogue
Hamza Salameh edited this page Aug 29, 2026
·
2 revisions
All 114 charts, grouped by category. Every title links straight into the studio, where the chart opens with editable data and a copyable snippet.
The Data column names the table layout it reads — see Data Formats for what each means and how to lay one out.
Jump to: Line & Area · Bar · Deviation · Part to Whole · Radar · Scatter · Distribution · Hierarchy · Network · Flow · Comparison · Finance · Geo · KPI & Micro · Custom Engine
13 charts.
| Chart | What it is for | Engine | Data |
|---|---|---|---|
| Basic Line | A single measure over time — the default answer to "how has this moved?" | Chart.js | labelSeries |
| Multi-Series Line | Several measures on one scale, so the reader compares shapes rather than levels. | Chart.js | labelSeries |
| Stepped Line | For values that hold flat then jump — prices, tiers, headcount. | Chart.js | labelSeries |
| Stepped Line — Multi | Two plans side by side, each holding its price until it changes. | Chart.js | labelSeries |
| Area | A filled line. The fill implies accumulation, so use it for volumes, not rates. | Chart.js | labelSeries |
| Stacked Area | Composition over time. Only the bottom band has a flat baseline — read the total, not the middles. | Chart.js | labelSeries |
| Confidence Band | A mean line inside an upper and lower bound — a forecast that admits its uncertainty. | Chart.js | labelValue |
| 100% Stacked Area | Share of total over time. Every column sums to 100, so only the mix moves. | Chart.js | labelSeries |
| Step Area | A stepped line with the space beneath filled — discrete states that hold, then change. | Chart.js | labelSeries |
| Fan Chart | A projection whose uncertainty widens with distance. History is one line; the future is a spread. | Chart.js | labelValue |
| Horizon Chart | An area chart folded into bands so it survives being one-quarter the height. Density over precision. | Canvas 2D | rowSeries |
| Spiral Plot | Time coiled outward so each turn is one cycle — weekly or seasonal rhythm becomes visible. | Canvas 2D | labelValue |
| Radial Line | A cycle wrapped into a circle, so the end of one turn meets the start of the next. For seasons, hours and anything that repeats. | Canvas 2D | labelSeries |
9 charts.
| Chart | What it is for | Engine | Data |
|---|---|---|---|
| Vertical Bar | Discrete comparison across a handful of categories. The workhorse. | Chart.js | labelSeries |
| Stacked Bar | Parts inside a total. Reliable for the total and the bottom band, harder for the middles. | Chart.js | labelSeries |
| Horizontal Bar | Rotate when the category names are long — labels stay readable and ranking reads top-down. | Chart.js | labelValue |
| 100% Stacked Bar | Share of total per group. Every column reaches 100%, so only the mix is comparable. | Chart.js | labelSeries |
| Diverging Bar | Signed values around a zero baseline — variance, sentiment, net change. | Chart.js | labelValue |
| Floating Bar (Gantt) | Bars given a start and an end instead of a length — schedules and ranges. | Chart.js | pairs |
| Waterfall | How a starting figure becomes an ending figure, one contribution at a time. | Chart.js | items |
| Butterfly (Population Pyramid) | Two groups mirrored across a shared category axis. One side is negated to fan out. | Chart.js | pairs |
| Lollipop | A bar reduced to a stem and a dot — less ink for the same ranking, at any density. | Canvas 2D | items |
3 charts.
| Chart | What it is for | Engine | Data |
|---|---|---|---|
| Surplus / Deficit Line | One line against a baseline, filled two colours. Reads sign and magnitude at once. | Canvas 2D | labelValue |
| Diverging Stacked Bar (Likert) | Survey responses split around a neutral centre. The standard chart for agree/disagree scales. | Chart.js | rowSeries |
| Spine Chart | Two contrasting groups either side of a shared spine, with the categories down the middle. | Canvas 2D | pairs |
11 charts.
| Chart | What it is for | Engine | Data |
|---|---|---|---|
| Pie | Share of a single total. Honest up to about five slices, misleading beyond that. | Chart.js | labelValue |
| Doughnut | A pie with the middle removed — the hole is free space for a headline number. | Chart.js | labelValue |
| Gauge | A half doughnut reading one number against its ceiling. Score, capacity, progress. | Chart.js | labelValue |
| Polar Area | Equal angles, varying radius. Reads cyclical magnitude better than a pie. | Chart.js | labelValue |
| Nightingale Rose | Florence Nightingale's coxcomb: radius scaled by square root so area, not length, carries the value. | Canvas 2D | labelValue |
| Waffle | A hundred squares. Counting beats angle-judging, so small shares stay legible. | DOM / CSS | items |
| Dot Matrix | One dot per unit, blocked by category. The count is there to be counted rather than estimated off an axis. | Canvas 2D | items |
| Proportional Area | Shapes scaled so area — not width — carries the value. Nested to make the ratio directly comparable. | Canvas 2D | items |
| Radial Column | Bars grown outward from a common circle. Fits many more categories than a bar chart, at the cost of comparing them exactly. | Canvas 2D | labelValue |
| Nested Proportional Area | Circles sized by area and drawn one inside another. Shows a part sitting inside its whole rather than beside it. | Canvas 2D | items |
| Pictogram (Isotype) | Counting in icons rather than squares. Isotype’s rule still holds: repeat the symbol, never scale it. | Canvas 2D | items |
3 charts.
| Chart | What it is for | Engine | Data |
|---|---|---|---|
| Radar | One profile across several dimensions. Good for shape, poor for exact values. | Chart.js | labelSeries |
| Radar — Comparison | Overlaid profiles. Three is the practical ceiling before the shapes stop separating. | Chart.js | labelSeries |
| Radar — Filled | A single strongly filled profile, when the silhouette is the whole message. | Chart.js | labelSeries |
8 charts.
| Chart | What it is for | Engine | Data |
|---|---|---|---|
| Scatter | Two measures per item. The eye reads correlation from the cloud, not from any one dot. | Chart.js | labelValue |
| Scatter — Clusters | Segments given their own colour, so the groups separate without a legend hunt. | Chart.js | xyGroups |
| Bubble | A scatter with a third measure in the radius. Area encodes size — never diameter. | Chart.js | xyGroups |
| Hexagonal Binning | Counts points into hexagons and shades by how many landed in each. Reads density where a scatter has gone solid. | Canvas 2D | labelValue |
| Scatterplot Matrix | Every pair of variables plotted against every other. Finds the relationship worth a chart of its own. | Canvas 2D | labelSeries |
| 2D Density Contour | Smooths a cloud of points into nested bands of equal density — a topographic map of where the data sits. | D3 | labelValue |
| Connected Scatter | A scatter whose points are joined in time order — traces how two variables moved together. | Chart.js | xyGroups |
| Quadrant Chart | A scatter cut into four named zones. The labels do the interpreting, which is the whole appeal — and the risk. | Canvas 2D | items |
11 charts.
| Chart | What it is for | Engine | Data |
|---|---|---|---|
| Histogram | Counts per bucket. Bin width is a real editorial choice — change it and see. | Chart.js | observations |
| Box Plot | Median, quartiles, whiskers and outliers — five numbers that survive skew. | Chart.js | observations |
| Violin | A mirrored kernel density estimate. Shows shape a box plot flattens — bimodality, skew. | Canvas 2D | observations |
| Heatmap | Density across two categorical axes. Colour carries the value, position carries the key. | Chart.js | matrix |
| Density Plot | A smoothed histogram. No bin-width argument, but the bandwidth choice is doing the same work. | Canvas 2D | observations |
| Ridgeline Plot | Densities stacked and overlapped down the page. Trades exact values for a very readable shift. | Canvas 2D | observations |
| Cumulative Curve (ECDF) | Every point answers "what share is below this value?" — no binning decision to argue about. | Canvas 2D | observations |
| Beeswarm | Every observation as its own dot, nudged aside so none hide. Honest about sample size. | Canvas 2D | observations |
| Barcode Plot | One thin tick per observation on a shared scale. Reads clustering and outliers in almost no height. | Canvas 2D | observations |
| Radial Histogram | Bins wrapped around a circle. The right choice when the variable itself is angular — wind, time of day. | Canvas 2D | labelValue |
| Stem & Leaf Plot | A histogram that keeps the digits. The bars are made of the numbers themselves, so nothing is rounded away. | Canvas 2D | observations |
7 charts.
| Chart | What it is for | Engine | Data |
|---|---|---|---|
| Treemap | Nested rectangles sized by value. Packs a lot of parts into a fixed frame. | Chart.js | tree |
| Sunburst | Radial partition — depth outward, share by angle. Reads a deep tree in one glance. | D3 | tree |
| Circle Pack | Circles packed by size and tinted by group. Friendlier than a treemap, less precise. | D3 | items |
| Icicle | A sunburst unrolled. Depth runs one way, share the other — easier to label than the radial form. | D3 | tree |
| Dendrogram | The tree drawn as a tree. Shows structure and depth rather than the size of each part. | D3 | tree |
| Voronoi Diagram | Space divided by nearest point. Every cell is the territory closest to its seed. | D3 | places |
| Radial Dendrogram | The tree laid around a circle, leaves on the circumference. Fits a deeper hierarchy than a page is wide. | D3 | tree |
6 charts.
| Chart | What it is for | Engine | Data |
|---|---|---|---|
| Network Graph | Force-directed nodes and edges. Good for structure and clustering, poor for anything precise. | D3 | edges |
| Arc Diagram | Nodes on one line, links as arcs above it. Trades the freedom of a force layout for a readable order. | D3 | edges |
| Adjacency Matrix | The same graph as a grid. Unreadable for paths, but far better than a hairball for dense networks. | Canvas 2D | edges |
| Parallel Sets | Categorical flow across several dimensions. A Sankey for attributes rather than quantities. | Canvas 2D | dimensions |
| Venn Diagram | Overlapping sets. Honest for two or three; past that the geometry stops being able to tell the truth. | Canvas 2D | items |
| Non-ribbon Chord | Nodes on a circle joined by thin curves instead of ribbons. Keeps forty connections countable where a chord diagram would go solid. | D3 | edges |
6 charts.
| Chart | What it is for | Engine | Data |
|---|---|---|---|
| Sankey | Quantities moving between stages. Ribbon width is the volume; the drop-offs are the story. | Chart.js | links |
| Chord Diagram | Symmetric flows between every pair. Ribbon thickness is the shared volume. | D3 | links |
| Funnel | Stage-by-stage attrition. The taper is the drop-off; the side column is the honest number. | Canvas 2D | items |
| Marimekko | Column width is one measure, segment height another — market size against mix. | Canvas 2D | items |
| Stream Graph | A stacked area freed from the baseline. Reads total volume and rhythm, not exact values. | D3 | labelSeries |
| Alluvial Diagram | One population re-sorted stage by stage. Blocks are where everybody is now; ribbons are who moved where. | D3 | links |
17 charts.
| Chart | What it is for | Engine | Data |
|---|---|---|---|
| Word Cloud | Words sized by their count. Fast to read the top few terms, and honest about nothing below them. | Canvas 2D | items |
| Tally Chart | Counts as five-bar gates, the way they were written down in the field. Exact for small numbers, useless for large ones. | Canvas 2D | items |
| Slope Chart | Two points per item joined by a line. Rank change and direction, nothing else. | Canvas 2D | pairs |
| Candlestick | Open, high, low and close in one mark. Body is the move, wick is the range. | Canvas 2D | ohlc |
| Parallel Coordinates | One line per item crossing several axes. Crossings mean trade-offs. | D3 | rowSeries |
| Bump Chart | Rank over time on a reversed axis, so first place sits on top and crossings are overtakes. | Chart.js | labelSeries |
| Bar + Line | A magnitude on the left axis and a rate on the right. Two units, one frame. | Chart.js | labelSeries |
| Stacked Bar + Total Line | Composition in the stack, total on the line — the figure the stack makes hard to read. | Chart.js | labelSeries |
| Dumbbell | Two dots joined by a rule. The gap is the point, which is exactly what a paired bar chart buries. | Canvas 2D | pairs |
| Pareto Chart | Sorted bars with a cumulative curve. Finds the few causes behind most of the effect. | Chart.js | items |
| Span Chart | Range only — the minimum and maximum, with the body of the bar removed. Emphasises spread, not size. | Canvas 2D | pairs |
| Bar with Error Bars | Means with their uncertainty drawn on. A bar without this is a claim without a confidence interval. | Canvas 2D | items |
| Timeline | Priestley’s chart: one bar per span of time, stacked into lanes. Duration and overlap at a glance. | Canvas 2D | items |
| Calendar Heatmap | A year as a grid of weeks. Made famous by contribution graphs; good for any daily count. | Canvas 2D | labelValue |
| Cycle Plot | A small trend line inside each season, against that season's own mean. Separates "Julys are high" from "Julys are rising". | Canvas 2D | labelSeries |
| Dot Plot | One row per category, a dot per series on a shared axis. Reads more series than a grouped bar without the clutter of bars. | Canvas 2D | labelSeries |
| Time Table | A schedule grid: rows against time slots, filled only where something happens. The empty cells are half the message. | Canvas 2D | matrix |
4 charts.
| Chart | What it is for | Engine | Data |
|---|---|---|---|
| OHLC Bar | The candlestick’s older sibling: a vertical range with ticks left for open and right for close. | Canvas 2D | ohlc |
| Renko | A brick is laid only when price moves a fixed amount. Time disappears; noise goes with it. | Canvas 2D | ohlc |
| Point & Figure | Columns of X and O. A new column starts only when price reverses by a set number of boxes. | Canvas 2D | ohlc |
| Kagi | A line that thickens on a break to a new high and thins on a break to a new low. Direction, not duration. | Canvas 2D | ohlc |
8 charts.
| Chart | What it is for | Engine | Data |
|---|---|---|---|
| Choropleth Map | Regions shaded by value. Only ever for rates and ratios — shade a raw count and you have drawn a population map. | D3 | regions |
| Globe | The world as a sphere, shaded by value. Drag to spin it. Honest 3D — no extrusion, no occlusion, no distorted areas. | D3 | regions |
| City Map | One country, with a value at each city. The common case when the statistic you have is local, not national. | D3 | places |
| Proportional Symbol Map | Circles sized by value at each location. The right chart for counts, where a choropleth would mislead. | D3 | places |
| Dot Density Map | One dot per n units, scattered inside each region. Shows where things are without shading whole areas. | D3 | regions |
| Flow Map | Movement between places, drawn as arcs whose width is the volume. Origin, destination and size in one mark. | D3 | places |
| Tile Grid Map | Every region an equal square in roughly the right place. Gives Luxembourg the same room as France — deliberately. | Canvas 2D | items |
| Cartogram (Non-contiguous) | Each country shrunk about its own centre in proportion to its value. Keeps the shapes; abandons the adjacency. | D3 | regions |
3 charts.
| Chart | What it is for | Engine | Data |
|---|---|---|---|
| Sparkline | Tufte’s word-sized graphic: shape only, no axes. Meant to sit inline with text or in a table cell. | Canvas 2D | rowSeries |
| Bullet Chart | Stephen Few’s replacement for the dashboard gauge: actual, target and qualitative bands in one row. | Canvas 2D | items |
| Radial Bar | Bars bent into concentric arcs. Compact and popular, though the outer ring always looks longer than it is. | Canvas 2D | items |
5 charts.
| Chart | What it is for | Engine | Data |
|---|---|---|---|
| Line — Custom Engine | The same line chart with no Chart.js on the page. Canvas, DPR-aware, ~12KB of engine. | OpenCharts | labelSeries |
| Area — Custom Engine | The engine has no separate area class — it is the line chart with the fill switched on. | OpenCharts | labelSeries |
| Bar — Custom Engine | Grouped, stacked or horizontal from one config key, drawn straight to canvas. | OpenCharts | labelSeries |
| Pie / Doughnut — Custom Engine | One class covers both, with a centre-text slot the doughnut hole was made for. | OpenCharts | items |
| Scatter — Custom Engine | Points, optional bubble sizing, and a least-squares trend line the engine computes itself. | OpenCharts | xyGroups |
Generated from the registry by tools/build-wiki.mjs. Do not edit by hand — regenerate.