> blog // library

234 charts, and when to use each

October 4, 2026 · e.gfx.chart, e.gfx.chart.scene, e.gfx.chart.svg, e.gfx.chart.pdf, e.gfx.chart.locale, e.gfx.chart.widget

Updated October 5, 2026: PDF export, speed measured against matplotlib, and SVG files a third smaller.

Neper's chart library now draws 234 kinds of chart, from a bar chart to a Laney u′ control chart, a Kaplan-Meier curve, a Sankey diagram and a Nyquist plot. That is too many to pick from by scrolling. This post is the guide we wanted ourselves: each chart, the question it answers, and when to reach for something else instead.

Every picture here was rendered by Neper itself, by examples/chart_gallery.e through the CPU scene renderer and PNG encoder, and each has an SVG twin streamed from the same layout. Behind the gallery, 156 test programs check the geometry, statistics and refusal paths on Windows and on Linux.

How the library is built

A chart in e.gfx.chart is a layout, not a picture. You hand it borrowed columns of numbers and caller-owned storage; it fills that storage with renderer-neutral marks (points, segments, rectangles, polygons, labels) and never allocates on its own. The same marks then go wherever you need them:

Here is a whole program: six bars, the library's accessible palette, a colour-blindness check of that palette, and an SVG file. We compiled and ran it on Windows and on Linux, and both printed exactly this.

use e.fs
use e.gfx.chart
use e.gfx.chart.svg as chart_svg
use e.gfx.geometry
use e.gfx.paint
use e.io
use e.mem

fn main(a: *mem.Arena, args: []str) -> err {
    // Borrowed data in, caller-owned marks out: nothing is allocated for the geometry.
    let quarter = [6]f32{ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 }
    let revenue = [6]f32{ 3.1, 3.6, 4.4, 4.0, 5.2, 5.9 }
    var bars: [6]geometry.Rect = zero
    let spec = chart.spec(.Bar, geometry.rect(40.0, 20.0, 300.0, 180.0), quarter[..], revenue[..])
    let marks = try chart.layout(&spec, zero, zero, bars[..])
    let last = marks.bars[5usize]
    try io.printf["{} bars; the last is {} px tall at x = {}\n"](marks.bars.len, last.height, last.x)
    // Six series colours that clear 4.5:1 on white, and how close the nearest
    // two come for a viewer with deuteranopia.
    var palette_storage: [6]paint.Color = zero
    let palette = try chart.accessible_palette(paint.rgba(1.0, 1.0, 1.0, 1.0), palette_storage[..])
    let typical = try chart.palette_separation(palette, .Typical, 1.0)
    let deutan = try chart.palette_separation(palette, .Deutan, 1.0)
    try io.printf["closest pair, typical vision: {} and {}, CIEDE2000 {}\n"](typical.first, typical.second, typical.difference)
    try io.printf["closest pair, deuteranopia:   {} and {}, CIEDE2000 {}\n"](deutan.first, deutan.second, deutan.difference)
    // The same marks stream to SVG (or to the CPU scene for a PNG).
    let (state, unused, writer_error) = io.memory_writer(a, 0usize)
    if writer_error != ok { ret writer_error }
    var held = state
    var writer = io.writer(mem.cast[*void](&held), io.memory_write)
    try chart_svg.begin(&writer, 360.0, 220.0, "Revenue", "Quarterly revenue, six quarters")
    try chart_svg.append(&writer, &marks, palette[0usize])
    try chart_svg.finish(&writer)
    let svg = io.memory_bytes(&held)
    try fs.write_file(a, "revenue.svg", svg)
    try io.printf["wrote revenue.svg: {} bytes\n"](svg.len)
    ret ok
}
6 bars; the last is 180 px tall at x = 295
closest pair, typical vision: 1 and 5, CIEDE2000 10.082577076760705
closest pair, deuteranopia:   0 and 3, CIEDE2000 1.219605253081527
wrote revenue.svg: 836 bytes

The last two lines carry a real lesson. The palette keeps every series colour at 4.5:1 contrast against white, and for typical vision its closest pair is still clearly different. For a reader with deuteranopia, though, series 0 (blue) and 3 (purple) are barely distinguishable. Contrast is not colour-blind safety, which is why the previews label series directly instead of relying on a colour legend.

How fast is it?

We timed one realistic chart in Neper and in matplotlib: a 1,000-point line, 200 square markers, a y grid with tick labels and a title at 360×240 pixels, built from the same data. Each pass draws 200 charts and writes them to memory as SVG and as PNG. matplotlib uses its Agg backend and a new figure per chart, as a reporting script would, and keeps SVG text as text, as Neper does. The times are medians of nine runs on one Windows laptop (Intel Core i5-12500H, Python 3.12.10, matplotlib 3.9.4).

Per chartNepermatplotlibFaster
SVG2.50 ms15.63 msNeper, 6.2×
PNG20.02 ms16.51 msmatplotlib, 1.21×
Layout only0.15 ms–
Rasterize only, no encoding1.99 ms–
SVG / PNG file size30.2 / 14.0 KB44.4 / 11.2 KB
Whole run, both passes5.0 s7.2 smatplotlib import: 0.53 s
Grouped bar chart of milliseconds per chart: SVG 2.50 for Neper against 15.63 for matplotlib; PNG 20.02 against 16.51.
The same results, drawn by Neper's grouped bar chart.

We report both results, because one of them is a loss.

The same Neper program on Linux (WSL) runs within a few percent of these times and writes output of exactly the same size. ggplot2, base R graphics and lattice are measured in a later post; matplotlib and R on Linux are not measured. The harness is in benchmarks/charts: python benchmarks/charts/run.py <neper-self> 9 builds the Neper side, runs both nine times and writes the medians to results/. Single runs on this shared machine varied by up to half, which is why the table uses medians.

Start from the question

Most bad charts are good charts answering the wrong question. Decide what you want the reader to see, then pick from the matching family:

If the question is…Start withFamily
How much, and which is biggest?Bar, lollipop, dotComparing amounts and ranks
What is it made of?Stacked bar, treemap, waffleParts of a whole
How did it change?Line, step, areaChange over time
What does the data look like?Histogram, ECDF, box, violinDistributions
Do two things move together?Scatter, regression fit, hexbinRelationships between variables
Are two categories associated?Mosaic, fourfold, cross-tabCategories, tables and sets
Is my model any good?ROC, calibration, decision curveClassifiers and predictive models
Is my regression trustworthy?Residuals, influenceRegression diagnostics
Does the treatment help?Kaplan-Meier, forest plotMedicine, survival and agreement
Is the process stable?Control chartsStatistical process control
Can the process meet spec?Capability, Gage R&RCapability and measurement systems
Where should we improve?Pareto, fishbone, value streamProcess improvement and experiments
Are we on schedule?Gantt, burnup, earned valueProjects and operations
How is the asset doing?Candlestick, drawdownFinance
Where does it flow?Sankey, network diagramsFlows, networks and diagrams
What frequencies are in the signal?Spectrogram, BodeSignals, fields and dynamics
Where is it?Choropleth, proportional symbolsMaps

A few rules hold across all of them:

The families

Comparing amounts and ranks

Use these when the question is "how much, and which is bigger?" Position along a common baseline is what the eye judges best, so a plain bar or dot beats anything round or three-dimensional for exact comparison. Sort the categories unless their order means something.

Bar / column rendered by Neper

Bar / column

The default for comparing one number across categories. Bars must start at zero, because their length is the message. With many categories or long names, turn it sideways.

Grouped bar rendered by Neper

Grouped bar

Two or three series side by side per category, when the comparison inside each group matters most (this year against last, plan against actual). Past four series it turns into a picket fence; switch to small multiples.

Bars on an ordered category axis rendered by Neper

Bars on an ordered category axis

Categories with a meaningful order of their own (sizes, stages, survey answers), including levels with no data, which keep an empty slot instead of silently disappearing.

Lollipop rendered by Neper

Lollipop

A bar chart with less ink: same use, better when there are many categories or the values are close together and thick bars would dominate the page.

Dumbbell rendered by Neper

Dumbbell

Two values per category, such as before and after or men and women, where the gap is the story. Easier to read than paired bars when there are many rows.

Slopegraph rendered by Neper

Slopegraph

The same items at exactly two moments. Crossing lines show who overtook whom; the rank change is the point, not the path between the two moments.

Range / interval bars rendered by Neper

Range / interval bars

A low and a high per category, such as daily temperature ranges, price bands or shift windows, when the span matters more than any single value.

Error bars rendered by Neper

Error bars

Point estimates with their uncertainty. Always say what the whiskers mean (standard deviation, standard error or a confidence interval), because readers will guess otherwise.

Bullet graph rendered by Neper

Bullet graph

One measure against a target and qualitative bands (poor, fair, good) in a small strip. It does a dashboard gauge's job in a tenth of the space.

Radar rendered by Neper

Radar

Comparing a few profiles across five to eight dimensions measured on the same scale, such as product scorecards. Shape is easy to see; exact values are not, so keep a table nearby.

Population pyramid rendered by Neper

Population pyramid

Two mirrored distributions over the same ordered bands, classically age by sex. It works for any two-group comparison over ordered bins.

Funnel rendered by Neper

Funnel

Counts that shrink through ordered stages (visits, leads, trials, wins). Label each stage with its value or conversion rate, because tapering widths are hard to compare.

Rank over time (ribbons) rendered by Neper

Rank over time (ribbons)

Who led, and when: the position of each competitor across periods. Use it when rank matters more than the gaps between competitors.

Parts of a whole

Shares only make sense when the parts add up to a meaningful total. For two to five parts a bar, pie or waffle all work; for many parts or a hierarchy, use the area-based layouts. When the parts change over time, stacked bars or a streamgraph beat a row of pies.

Pie rendered by Neper

Pie

A few shares of one total, when "about a quarter" is precise enough. Five slices at most, the largest first, and labels on the slices instead of a legend.

Donut rendered by Neper

Donut

A pie with room in the middle for the total or a headline number. Same limits as a pie.

Waffle rendered by Neper

Waffle

Shares as countable squares out of 100. Friendlier than a pie for general readers, and small shares stay visible.

Stacked bar (signed) rendered by Neper

Stacked bar (signed)

Totals per category and their make-up at once. Only the bottom segment shares a baseline, so compare inner segments with care. Negative parts stack below zero.

100% stacked bar rendered by Neper

100% stacked bar

Composition across categories when the totals differ or don't matter: market share by region, answer mix by group.

Treemap rendered by Neper

Treemap

Large hierarchies of sizes (budgets, disk usage, portfolio weights), where nested rectangles fit hundreds of items on a page. Colour can carry a second measure.

Sunburst rendered by Neper

Sunburst

A hierarchy shown as rings. It reads well for a few levels when the path from the root matters more than precise area comparison.

Icicle rendered by Neper

Icicle

The rectangular cousin of the sunburst. Depth runs top to bottom and the labels fit better, so it is often the more practical of the two.

Circle packing rendered by Neper

Circle packing

Hierarchy and grouping at a glance, for organisation charts with sizes or clusters of clusters. It wastes space by design, so don't use it for exact comparison.

Marimekko rendered by Neper

Marimekko

Two-dimensional shares: column width is each segment's size and the stacks show its mix, as in market size by region and share by vendor within each.

Spine plot rendered by Neper

Spine plot

Outcome mix across groups of different sizes, from counts. Each bar's width is its group's size and its stack is the outcome proportions.

Waterfall / bridge rendered by Neper

Waterfall / bridge

How a starting value becomes an ending value through positive and negative steps: profit bridges, budget variances, headcount changes.

Decomposition tree rendered by Neper

Decomposition tree

Drilling a total into its contributors level by level, with each node's share. Good for "where does this number come from?"

Change over time

Time goes left to right. A line says the points in between are meaningful; bars or dots say they are separate periods. Real calendars have uneven months and leap years, so use a date axis rather than evenly spaced labels.

Line rendered by Neper

Line

The default for a continuous series. Several series fit on one chart until they tangle (four or five); after that, use small multiples.

Points and line rendered by Neper

Points and line

A line where each observation should stay visible: sparse or irregular measurements, or when individual readings matter.

Step rendered by Neper

Step

Values that hold until they change: prices, inventory, interest rates, configuration states. A sloped line would wrongly suggest a gradual change.

Area rendered by Neper

Area

A single series whose volume matters, such as cumulative totals or load over time. Area from zero; don't stack more than a few.

Date-aware line rendered by Neper

Date-aware line

Real calendar time: months of different lengths, leap days, irregular sampling. Points sit at their true elapsed time and month starts are labelled.

Labeled line rendered by Neper

Labeled line

A line with titled axes and tick labels, the standard published look. Use direct labels at the line ends instead of a legend whenever you can.

Sparklines rendered by Neper

Sparklines

Word-sized trends in a table or dashboard row: shape and direction, not values. Put the current number next to it.

Bar + line (secondary axis) rendered by Neper

Bar + line (secondary axis)

Two measures with different units, such as revenue bars and an index line. Label both axes clearly; dual axes invite false correlations, so use them sparingly.

Streamgraph rendered by Neper

Streamgraph

Many categories' volumes flowing over time around a centre line. Striking for broad shifts in share; poor for reading exact values.

Horizon chart rendered by Neper

Horizon chart

Many time series stacked in very little height. Bands are folded and shaded by magnitude, which suits monitoring dozens of servers or sensors at once.

Calendar heatmap rendered by Neper

Calendar heatmap

Daily values on a week-by-weekday grid: activity, sales or incidents, when weekly rhythm and individual days both matter.

Seasonal subseries rendered by Neper

Seasonal subseries

Is every January like every other January? Each season's values over the years, with its mean, to separate seasonality from trend.

Time-series decomposition rendered by Neper

Time-series decomposition

A series split into trend, seasonal and remainder panels, to see what is structure and what is noise before forecasting.

Forecast fan rendered by Neper

Forecast fan

A forecast with nested prediction intervals (50/80/95%) that widen with the horizon. It is honest about uncertainty in a way a single line never is.

ACF / PACF correlogram rendered by Neper

ACF / PACF correlogram

Autocorrelation by lag with significance bounds: choosing ARIMA orders, checking residuals for leftover structure, finding seasonality.

Connected scatter rendered by Neper

Connected scatter

Two measures that move together over time (unemployment and inflation, price and volume), with the path drawn in time order.

Distributions

Before any summary statistic, look at the shape: one peak or two, skew, outliers, gaps. Histograms and densities show shape, box plots summarise it compactly for many groups, and Q-Q and probability plots check it against a model. With small samples, show every point.

Histogram rendered by Neper

Histogram

The shape of one numeric variable. Try a few bin widths; the story should survive them. Bars touch because the bins are contiguous.

Frequency polygon rendered by Neper

Frequency polygon

A histogram drawn as a line, which makes it easy to overlay two or three distributions on one axis.

Density (KDE) rendered by Neper

Density (KDE)

A smoothed distribution shape. Good for overlays and for comparing modes; state the bandwidth, because it changes the picture.

ECDF rendered by Neper

ECDF

Every observation as a cumulative step: medians, percentiles and comparisons between groups with no binning choices at all. Underused and excellent.

Box plot rendered by Neper

Box plot

Median, quartiles and outliers for many groups side by side. Compact, but it hides bimodality, so pair it with points or a violin when n is small.

Letter-value (boxen) plot rendered by Neper

Letter-value (boxen) plot

A box plot for large samples: more quantiles in nested boxes show the tails that a plain box reduces to a swarm of outliers.

Violin rendered by Neper

Violin

A mirrored density per group: shape and spread together. Better than a box plot when distributions can have two peaks.

Half violin rendered by Neper

Half violin

One side of a violin, leaving room for points or a box on the other side.

Raincloud rendered by Neper

Raincloud

Density, box summary and every raw observation together. The most complete small-sample distribution picture.

Ridgeline rendered by Neper

Ridgeline

Distributions of many groups or periods stacked with slight overlap, such as monthly temperatures or response times by release.

Beeswarm rendered by Neper

Beeswarm

Every point of a modest sample, nudged so none overlap. Shows both the distribution and the individual cases.

Strip (jitter) rendered by Neper

Strip (jitter)

Raw points per group with random jitter. A quick honest look at small samples; use a beeswarm when overlap gets heavy.

Rug rendered by Neper

Rug

Tick marks of the raw values along an axis, usually under a density or a scatter, to show where the data really are.

Binned dot plot rendered by Neper

Binned dot plot

Stacked dots per bin: a histogram where each observation can still be counted, ideal for teaching and small samples.

Stem-and-leaf rendered by Neper

Stem-and-leaf

A text histogram that keeps the digits of every value, for small datasets and printed reports.

Normal Q-Q plot rendered by Neper

Normal Q-Q plot

Do the data follow a normal distribution? Points on the line mean yes; curved ends mean heavy or light tails. Standard for checking model residuals.

P-P plot rendered by Neper

P-P plot

Compares cumulative probabilities instead of quantiles. More sensitive in the middle of the distribution and less in the tails than a Q-Q plot.

Normal probability plot rendered by Neper

Normal probability plot

Observed values against a probability-scaled axis, the engineering form of the Q-Q plot, read directly as percent below a value.

Weibull probability plot rendered by Neper

Weibull probability plot

Reliability data on Weibull paper, censored units included, against a reference Weibull line: straight means Weibull, and the slope tells infant mortality from wear-out.

Scatter with marginal histograms rendered by Neper

Scatter with marginal histograms

A joint relationship plus each variable's own distribution on the edges, so skew or clusters in either axis are not missed.

Monte Carlo histogram rendered by Neper

Monte Carlo histogram

Simulated outcomes of a model with a decision threshold marked: the spread of what could happen, not just the average.

Monte Carlo CDF rendered by Neper

Monte Carlo CDF

The same simulation read cumulatively: "the chance the outcome is at most 70" comes straight off the curve.

Relationships between variables

Scatter plots are the workhorse; everything here either adds a model to the scatter, copes with too many points, or extends the idea to more than two variables. Choose log or symmetric-log axes when values span orders of magnitude.

Scatter rendered by Neper

Scatter

Two numeric variables per observation: correlation, clusters, outliers. The first chart to draw for any pair of measurements.

Bubble rendered by Neper

Bubble

A scatter with a third measure as circle area (never radius). Keep the bubbles few and labelled.

Log-scale scatter rendered by Neper

Log-scale scatter

Values spanning orders of magnitude, such as income, population or response times, where multiplicative change is what matters.

Labeled log scatter rendered by Neper

Labeled log scatter

The same with readable decade ticks (1, 10, 100, 1000), so readers never have to decode exponents.

Symmetric-log line rendered by Neper

Symmetric-log line

Data that cross zero and also span magnitudes, such as profit and loss or signed growth. It is linear near zero and logarithmic beyond.

Labeled symmetric-log line rendered by Neper

Labeled symmetric-log line

Symmetric-log with labelled ticks on both sides of zero.

Regression fit rendered by Neper

Regression fit

A scatter with its least-squares line: direction and strength of a linear trend. Always look at the residuals before trusting it.

Mean confidence band rendered by Neper

Mean confidence band

Where the true regression line probably lies. Narrow in the middle of the data, wider at the ends.

Interval band rendered by Neper

Interval band

Any lower-and-upper envelope over x: tolerance bands, ranges or min-max over time.

Prediction band rendered by Neper

Prediction band

Where a new observation will probably fall. Much wider than the confidence band, and the right band for setting expectations.

Data (covariance) ellipse rendered by Neper

Data (covariance) ellipse

The shape of a bivariate cloud: orientation, spread and correlation in one outline. Good for comparing groups without plotting every point.

Hexbin rendered by Neper

Hexbin

Tens of thousands of points or more. Counts per hexagon replace an unreadable black blob.

2-D bins rendered by Neper

2-D bins

The rectangular version of hexbin; it lines up with gridded data and integer axes.

2-D density contours rendered by Neper

2-D density contours

A smoothed joint density as contour lines. It shows clusters and modes without per-point clutter.

Contour lines rendered by Neper

Contour lines

Lines of equal value over a 2-D field, as on a topographic map: response surfaces, potentials, model outputs over two inputs.

Filled contours rendered by Neper

Filled contours

Contour bands filled by level, easier to read at a glance than lines alone.

Heatmap rendered by Neper

Heatmap

A matrix of values coloured by magnitude: hour by weekday, gene by sample, feature by model. Order the rows and columns meaningfully.

Correlation matrix rendered by Neper

Correlation matrix

Pairwise Pearson correlations of many variables with a diverging colour scale. The first look at a new dataset.

Scatterplot matrix rendered by Neper

Scatterplot matrix

Every pairwise scatter of a few variables at once (up to about six), for exploring before modelling.

Parallel coordinates rendered by Neper

Parallel coordinates

Many variables per item as polylines across parallel axes: trade-offs and clusters in multi-criteria data.

Ternary plot rendered by Neper

Ternary plot

Three parts that sum to a constant, such as soil texture, alloy composition or three-party vote shares, placed inside a triangle.

Scatter with missing data rendered by Neper

Scatter with missing data

Explicitly omits incomplete pairs while keeping the original row identities, so missingness is reported and never silently dropped.

Categories, tables and sets

When both variables are categories, the question is usually "is there an association?" These charts show counts, proportions and where observed counts depart from independence. The report layouts carry numbers where readers want exact values.

Mosaic plot rendered by Neper

Mosaic plot

A two-way table as nested rectangles, coloured by Pearson residuals so over- and under-represented cells stand out.

Association plot rendered by Neper

Association plot

Residuals from independence as bars above or below a baseline per cell: the departure itself, with nothing else.

Fourfold display rendered by Neper

Fourfold display

A 2×2 table (treatment against outcome) with an odds-ratio confidence ring: does the association hold?

Cross-tab report rendered by Neper

Cross-tab report

A table of counts with row, column and grand totals, for when readers need the exact numbers.

Matrix report rendered by Neper

Matrix report

Grouped rows by period with subtotals, missing cells kept distinct from zeros, and in-cell bars: the paginated-report layout.

In-cell data bars rendered by Neper

In-cell data bars

A small bar inside each table cell, the spreadsheet trick that makes a column of numbers scannable.

Faceted heatmap rendered by Neper

Faceted heatmap

The same matrix for several groups side by side on one colour scale.

Euler diagram (area-proportional) rendered by Neper

Euler diagram (area-proportional)

Two overlapping sets with circle and overlap areas proportional to the counts.

Venn diagram (three sets) rendered by Neper

Venn diagram (three sets)

All the intersections of three sets, labelled. Logical rather than proportional: use it to explain membership, not to compare sizes.

Word cloud rendered by Neper

Word cloud

A quick, informal impression of which terms dominate. Not for comparison (word length distorts size); use a sorted bar chart for that.

Classifiers and predictive models

A single accuracy number hides almost everything. These curves show how a model behaves across thresholds, whether its probabilities can be trusted, and whether using it beats simple strategies.

ROC curve rendered by Neper

ROC curve

True-positive rate against false-positive rate across thresholds. AUC summarises how well the model ranks cases, independent of prevalence.

Precision-recall curve rendered by Neper

Precision-recall curve

The better choice when positives are rare, as in fraud or disease screening, where ROC curves look optimistic.

Cumulative gain rendered by Neper

Cumulative gain

"Contacting the top 20% finds 60% of the buyers": a model's value for targeting a budgeted share of the population.

Cumulative lift rendered by Neper

Cumulative lift

Gain divided by the random baseline: how many times better than chance at each depth.

Calibration (reliability) rendered by Neper

Calibration (reliability)

Do predicted probabilities match observed frequencies? Essential when the probabilities themselves drive decisions.

Confusion matrix rendered by Neper

Confusion matrix

Counts of predicted against actual classes at one threshold: which errors the model makes, not just how many.

Partial AUC rendered by Neper

Partial AUC

The area under the ROC curve over only the false-positive range you can tolerate, as in screening where FPR must stay low.

Youden index rendered by Neper

Youden index

The threshold that maximises sensitivity plus specificity minus one, marked on the ROC curve. A common default cut-off.

Decision curve rendered by Neper

Decision curve

Net benefit across threshold probabilities against "treat all" and "treat none": is using the model clinically worth it?

Regression diagnostics

Fit a model, then try to break it. These four charts find curvature, unequal variance and the few observations that drive the result.

Residuals vs fitted rendered by Neper

Residuals vs fitted

Patterns here mean the model misses structure. A funnel means unequal variance; a curve means a missing term.

Leverage vs residual rendered by Neper

Leverage vs residual

Points that are unusual in x (high leverage) and also poorly fitted (large residual) are the dangerous ones.

Cook's distance rendered by Neper

Cook's distance

Each observation's influence on the whole fit, as one number per row. Inspect the spikes.

Influence plot rendered by Neper

Influence plot

Leverage, residual and Cook's distance (as bubble area) in one view: which points would change the conclusion.

Medicine, survival and agreement

Charts from clinical and reliability practice, where censoring, effect sizes and agreement between methods matter more than raw values.

Kaplan-Meier survival rendered by Neper

Kaplan-Meier survival

The probability of surviving (or not failing) past each time, with censored subjects handled correctly. Trials, churn, component life.

Nelson-Aalen cumulative hazard rendered by Neper

Nelson-Aalen cumulative hazard

Accumulated risk over time; its slope shows whether the hazard rises or falls, which survival curves hide.

Interval hazard rendered by Neper

Interval hazard

Events per person-time in each interval: when risk is highest, using exposure rather than head counts.

Forest plot rendered by Neper

Forest plot

Effect estimates and confidence intervals from several studies or subgroups against a no-effect line, the face of every meta-analysis.

Bland-Altman rendered by Neper

Bland-Altman

Do two measurement methods agree? Differences against means, with the bias and limits of agreement. Correlation is the wrong tool for this question.

Dose response rendered by Neper

Dose response

Observed responses against log dose beside a four-parameter logistic (LL.4) curve whose parameters you supply: potency (EC50), slope and the plateaus.

Statistical process control

Control charts separate routine variation from signals. Pick by data type and subgroup:

Your dataChart
Individual measurementsI and MR charts
Subgroups of 2–9X-bar and R
Subgroups of 10 or moreX-bar and S
Defectives, varying sample sizep (Laney p′ if huge samples)
Defectives, constant sample sizenp
Defects, constant areac
Defects, varying areau (Laney u′ if huge samples)
Rare eventsG or T
Small sustained shiftsCUSUM or EWMA
Several correlated variablesHotelling T², MEWMA, generalized variance
A known change in the processthe phased versions

Every chart in this family reports which points break its limits; the phased versions recompute the limits after a known change, so the process before the change does not mask the process after it.

Individuals (I) chart rendered by Neper

Individuals (I) chart

One measurement at a time (batch assays, monthly figures) with limits from the moving range.

Moving range (MR) chart rendered by Neper

Moving range (MR) chart

The companion of the I chart, tracking short-term variation between consecutive points.

X-bar chart rendered by Neper

X-bar chart

The mean of small rational subgroups (typically 4–5 parts per sample): sensitive to shifts in the process average.

Range (R) chart rendered by Neper

Range (R) chart

Within-subgroup spread for small subgroups, read together with X-bar.

X-bar / S chart rendered by Neper

X-bar / S chart

Means monitored with standard-deviation-based limits, for larger subgroups (about ten or more).

S chart rendered by Neper

S chart

Subgroup standard deviations, the spread companion for larger subgroups.

p chart rendered by Neper

p chart

The proportion defective when sample sizes vary. Limits widen for small samples.

np chart rendered by Neper

np chart

The number defective with a constant sample size: easier for operators to read than proportions.

c chart rendered by Neper

c chart

Defect counts per unit when the inspection area is constant (scratches per panel, errors per form).

u chart rendered by Neper

u chart

Defects per unit when the area of opportunity varies.

Laney p′ chart rendered by Neper

Laney p′ chart

A p chart corrected for overdispersion. Use it with very large samples, where ordinary p limits are so narrow that everything alarms.

Laney u′ chart rendered by Neper

Laney u′ chart

The same correction for rates.

G chart rendered by Neper

G chart

Opportunities between rare events (cases between infections, units between failures), where p charts break down.

T chart rendered by Neper

T chart

Time between rare events, modelled as exponential.

CUSUM (upper) rendered by Neper

CUSUM (upper)

Cumulative sums that catch small sustained upward shifts that Shewhart charts miss.

CUSUM (lower) rendered by Neper

CUSUM (lower)

The downward side of a two-sided CUSUM.

EWMA chart rendered by Neper

EWMA chart

An exponentially weighted moving average, also tuned for small shifts, and robust to non-normal data.

Run rules (Western Electric / Nelson) rendered by Neper

Run rules (Western Electric / Nelson)

Flags the eight run-test patterns (trends, runs on one side, alternation) even inside the limits.

Hotelling T² rendered by Neper

Hotelling T²

Several correlated measurements monitored as one. It catches combinations that look normal one variable at a time.

Generalized variance rendered by Neper

Generalized variance

Multivariate spread: the determinant of each subgroup's covariance matrix, against a pooled reference.

MEWMA rendered by Neper

MEWMA

The multivariate EWMA, for small drifts in correlated processes.

ANOM rendered by Neper

ANOM

Analysis of means: which groups differ from the grand mean, shown in control-chart form for audiences who don't read ANOVA tables.

Phased I chart rendered by Neper

Phased I chart

Separate limits before and after a known change (a new machine or a new supplier), so the old data don't hide the new process.

Phased X-bar / R rendered by Neper

Phased X-bar / R

Subgroup means and ranges with limits recomputed per phase.

Phased X-bar / S rendered by Neper

Phased X-bar / S

The same pair for larger subgroups.

Phased R chart rendered by Neper

Phased R chart

The range chart on its own, per phase.

Phased S chart rendered by Neper

Phased S chart

The standard-deviation chart per phase.

Phased p chart rendered by Neper

Phased p chart

Proportion defective with limits per phase.

Phased np chart rendered by Neper

Phased np chart

Number defective per phase.

Phased c chart rendered by Neper

Phased c chart

Defect counts per phase.

Phased u chart rendered by Neper

Phased u chart

Defect rates per phase.

Phased Laney p′ rendered by Neper

Phased Laney p′

The overdispersion-corrected p chart, per phase.

Phased Laney u′ rendered by Neper

Phased Laney u′

The overdispersion-corrected u chart, per phase.

Capability and measurement systems

Two questions come before any capability claim: is the process stable (see control charts), and can you measure it? These answer the questions that come after.

Normal capability rendered by Neper

Normal capability

Histogram against specification limits with Cp, Cpk, Pp and Ppk and expected defects per million, assuming normal data.

Non-normal capability rendered by Neper

Non-normal capability

The same for skewed data via a lognormal fit, because normal-theory Cpk misleads badly for skewed processes.

Attribute (binomial) capability rendered by Neper

Attribute (binomial) capability

Capability from pass/fail data: the defective rate per sample, its pooled value with Wilson confidence bounds, and PPM against a target.

Batch capability rendered by Neper

Batch capability

Separates within-batch from between-batch variation, for processes made in lots.

Capability sixpack rendered by Neper

Capability sixpack

Control charts, recent values, histogram, normality plot and capability indices on one page: the full Six Sigma report.

Gage R&R rendered by Neper

Gage R&R

How much of the observed variation comes from the measurement system (repeatability, reproducibility) rather than the parts.

Gage run chart rendered by Neper

Gage run chart

Every reading by part and operator, to see measurement consistency before computing any variance components.

Gage bias and linearity rendered by Neper

Gage bias and linearity

Is the gauge accurate across its range, or does its bias change with the size of the part?

Attribute agreement rendered by Neper

Attribute agreement

Do inspectors agree with each other and with the standard on pass/fail calls (kappa, percent agreement)?

Operating-characteristic curve rendered by Neper

Operating-characteristic curve

The probability that an acceptance-sampling plan accepts a lot, by incoming defect rate: what protection the plan really gives.

Process improvement and experiments

The diagrams of Lean and Six Sigma, plus the plots that read designed experiments.

Pareto rendered by Neper

Pareto

Causes sorted by frequency with a cumulative-percent line: the vital few worth fixing first.

Fishbone (Ishikawa) rendered by Neper

Fishbone (Ishikawa)

Brainstormed causes grouped under the six Ms around one effect, the classic root-cause workshop artifact.

Cause-effect tree rendered by Neper

Cause-effect tree

The same thinking as a tree with deeper sub-causes, when the fishbone runs out of room.

Multi-vari rendered by Neper

Multi-vari

Variation broken down by nested factors (machine, then setting, then readings): where the variation lives.

Main effects rendered by Neper

Main effects

The mean response at each level of each factor in a designed experiment: which knobs matter.

Interaction plot rendered by Neper

Interaction plot

Non-parallel lines mean the effect of one factor depends on another. Check this before trusting main effects.

Cube plot rendered by Neper

Cube plot

Mean responses at the corners of a 2³ design, to see a three-factor experiment at once.

SIPOC rendered by Neper

SIPOC

Suppliers, inputs, process, outputs and customers on one page, to scope an improvement project.

Value-stream map rendered by Neper

Value-stream map

Process steps with processing time against queue time and lead time: where the waiting is.

Future-state value stream rendered by Neper

Future-state value stream

Current and target flows on comparable lead-time ladders, with pull and FIFO cues and takt-time violations.

Branching process map rendered by Neper

Branching process map

Flow with probabilistic routes and rework loops, with yields along each branch.

Projects and operations

Charts for running work: schedules, progress, capacity, risk and state.

Gantt rendered by Neper

Gantt

Tasks on a time axis with progress, the default project schedule.

Milestone roadmap rendered by Neper

Milestone roadmap

Key dates by workstream without task-level detail, for leadership and customers.

Burndown rendered by Neper

Burndown

Work remaining against the ideal line within a sprint: will we finish?

Burnup rendered by Neper

Burnup

Work done against total scope. Unlike a burndown, it shows scope creep.

Earned value rendered by Neper

Earned value

Planned value, earned value and actual cost together: schedule and cost variance in one chart.

Resource histogram rendered by Neper

Resource histogram

Allocated capacity over time with the over-allocation above the cap highlighted.

Risk matrix rendered by Neper

Risk matrix

Likelihood against impact with counts per cell, to prioritise mitigation.

Kanban board rendered by Neper

Kanban board

Work items by state with WIP limits: flow and bottlenecks at a glance.

Swimlane rendered by Neper

Swimlane

A process across roles or teams, making the hand-offs visible.

PERT / CPM network rendered by Neper

PERT / CPM network

Task dependencies with durations and the critical path: which delays move the end date.

Event timeline rendered by Neper

Event timeline

Discrete events on tracks over time: releases, incidents, milestones.

State timeline rendered by Neper

State timeline

Which state each entity was in over time (running, idle, paused), as abutting bands.

Status history rendered by Neper

Status history

Health states per service over time, as on status pages and in SLO reviews.

Cohort retention rendered by Neper

Cohort retention

A triangle of retention by sign-up cohort and age: is the product getting stickier?

Gauge rendered by Neper

Gauge

One value against a target on a dial. Use it sparingly: a bullet graph says the same in less space.

KPI card rendered by Neper

KPI card

A headline number, its status against target and a slim progress bar.

Finance

Market and corporate-finance staples. All of them work from data the caller supplies; none of them fetch market data or fit financial models.

Candlestick rendered by Neper

Candlestick

Open, high, low and close per period, coloured by direction: price action for traders.

OHLC bars rendered by Neper

OHLC bars

The same four prices as ticks. Lighter than candles in dense charts.

Price and volume rendered by Neper

Price and volume

A price line over volume bars on a shared time axis: did the move happen on volume?

Returns and rolling volatility rendered by Neper

Returns and rolling volatility

Period returns over a rolling standard deviation: risk regimes over time.

Drawdown rendered by Neper

Drawdown

The fall from the running peak: the pain an investor actually experienced, and how long recovery took.

Yield curve rendered by Neper

Yield curve

Yield by maturity, comparing dates or scenarios: inversion, steepening, level shifts.

Cap-table waterfall rendered by Neper

Cap-table waterfall

Ownership before and after an option-pool top-up and a funding round: dilution, holder by holder.

Tornado rendered by Neper

Tornado

One-at-a-time sensitivity: which input assumptions move the output most, sorted by swing.

Valuation football field rendered by Neper

Valuation football field

Value ranges from different methods (comparables, precedents, DCF) on one per-share scale.

Flows, networks and diagrams

When the data are connections rather than numbers. Flow diagrams carry quantities; the rest show structure.

Sankey rendered by Neper

Sankey

Quantities flowing between stages, with band width proportional to flow: energy, budgets, user journeys.

Alluvial rendered by Neper

Alluvial

How the same items regroup across categorical stages (cohorts moving between segments).

Chord rendered by Neper

Chord

Flows between members of one group, such as migration between regions or trade between teams. Best with few members.

Org chart rendered by Neper

Org chart

Reporting lines as a tree.

Dependency graph rendered by Neper

Dependency graph

A DAG of build steps or packages: what must happen first, where paths merge and split.

Flowchart rendered by Neper

Flowchart

A procedure with decisions and loops, the universal process diagram.

Decision tree rendered by Neper

Decision tree

Choices and chance nodes with probabilities and expected values: which option to take.

State machine rendered by Neper

State machine

States and the events that move between them, including initial, final and self-loops.

Sequence diagram rendered by Neper

Sequence diagram

Messages between components over time, including asynchronous returns: protocols and APIs.

Entity-relationship rendered by Neper

Entity-relationship

Tables, keys and cardinalities: a database schema at a glance.

Signals, fields and dynamics

Engineering and science views where frequency, direction or state space is the axis.

Spectrogram rendered by Neper

Spectrogram

Frequency content over time (from a short-time Fourier transform): speech, vibration, radio.

Waterfall spectrum rendered by Neper

Waterfall spectrum

Successive spectra offset in perspective, to watch a peak drift or grow.

Bode plot rendered by Neper

Bode plot

Magnitude and phase of a system's frequency response on a log-frequency axis: filters and control loops.

Nyquist plot rendered by Neper

Nyquist plot

A frequency response in the complex plane, read against the critical point for stability margins.

Quiver (vector field) rendered by Neper

Quiver (vector field)

Arrows for direction and magnitude on a grid: wind, flow, gradients.

Streamlines rendered by Neper

Streamlines

Paths through a vector field, which show the flow structure more clearly than arrows.

Phase portrait rendered by Neper

Phase portrait

A system's state against its lagged state: cycles, attractors, chaos.

Recurrence plot rendered by Neper

Recurrence plot

When a series returns close to an earlier state. It reveals periodicity and regime changes.

Empirical variogram rendered by Neper

Empirical variogram

Semivariance by distance: spatial correlation range, the first step of kriging.

Wind rose rendered by Neper

Wind rose

Frequencies by direction sector with area-scaled petals: wind, orientations, headings.

Maps

Geography on caller-supplied boundaries, projected without a map service.

Choropleth rendered by Neper

Choropleth

A rate per region by colour. Always map rates, not raw counts, or the map just shows where people live. Missing regions stay visibly grey.

Proportional-symbol map rendered by Neper

Proportional-symbol map

Counts or volumes as circles at locations, with area-scaled sizes and a size legend. The right map for totals.

3-D

Perspective costs accuracy: bars and points at different depths can't be compared exactly. Use 3-D when the third dimension is the point (a surface or a helix) and prefer contours or small multiples for reading values.

3-D scatter rendered by Neper

3-D scatter

Points with three coordinates under an explicit camera, depth-sorted. For shape: helices, clusters, trajectories.

3-D histogram rendered by Neper

3-D histogram

Joint counts of two variables as prisms. A 2-D bin heatmap is usually easier to read.

3-D density surface rendered by Neper

3-D density surface

A joint density as a shaded surface, to show peaks and ridges.

3-D wireframe rendered by Neper

3-D wireframe

A function of two variables as row and column traces, lighter than a filled surface.

Composition, layout and accessibility

These previews show the engine rather than a chart type: the pieces that make the charts above publishable.

Facets with shared or free scales rendered by Neper

Facets with shared or free scales

Small multiples where you choose whether panels share axes (for comparison) or not (for shape).

Category facets rendered by Neper

Category facets

One panel per category level, empty levels included, with strip labels.

Shared guides rendered by Neper

Shared guides

Tick labels only on the outer edges of a facet grid, so panels stay large.

Plot grid rendered by Neper

Plot grid

Independent charts of different kinds arranged in weighted cells, the way a dashboard is.

Wrapped legend rendered by Neper

Wrapped legend

Legend items that wrap inside a fixed band without colliding.

Collision-free point labels rendered by Neper

Collision-free point labels

Labels placed around their points by priority, never overprinting; those that don't fit are reported, not hidden in the clutter.

Clipped annotation rendered by Neper

Clipped annotation

Marks and notes clipped to the plot area while titles stay outside.

Interactive selection rendered by Neper

Interactive selection

Hit-testing that maps a pointer to the source row, and SVG points that are keyboard-focusable.

Locale-aware axes rendered by Neper

Locale-aware axes

Ticks in the reader's number and date conventions (decimal and grouping separators, month names).

Accessible palette rendered by Neper

Accessible palette

Six series colours that each reach 4.5:1 contrast against the background.

Colour-vision check rendered by Neper

Colour-vision check

The palette as seen with protanopia, deuteranopia and tritanopia, with the closest pair's CIEDE2000 difference.

Gradients and embedded fonts rendered by Neper

Gradients and embedded fonts

Gradient fills shared by the PNG and the SVG, with the font embedded in the SVG.

Chart in an e.ui canvas rendered by Neper

Chart in an e.ui canvas

A chart hosted by the UI toolkit, laid out at whatever size the window gives it.

PDF export rendered by Neper

PDF export

The same layout as a vector PDF page for reports and print, beside the PNG and SVG; text is the built-in Helvetica, so nothing is embedded.

What is not there yet

The gallery is complete against its plan, but the library is not finished. Still open:

The charts above that do statistics (capability, Weibull, dose response, the control-chart limits) compute what their captions say and no more. Where a parameter is supplied rather than estimated, the preview says so in its footer. A chart is a view of an analysis, not a substitute for one.