A filled band between a series and a baseline. Navigates exactly as
TraceType.LINE does — the fill is what the mark looks like, not
an extra magnitude — so several AREA series are read independently of
one another. Use TraceType.STACKED_AREA when the bands sit on
top of each other instead.
Categories that stay put while a quantity is re-divided between them at each step -- an alluvial diagram. The same weighted flow a TraceType.SANKEY carries, drawn without a left-to-right budget.
Rank over time, one line per competitor -- a bump chart. Navigated as a multi-line layer, with the one difference that decides whether it reads correctly: the y axis is a rank, so rank 1 is the best position and the smallest number, and the pitch is inverted to match. Each point announces the places gained or lost alongside the rank, since the overtake is what the chart is drawn for.
A slope graph of values is a TraceType.LINE layer with two samples, not this.
A letter-value plot: the box plot's five-number summary generalised to a variable-depth ladder of quantiles, so a large sample's tails stay legible. Navigated as a box plot is -- one distribution per row, its summary values walked along the other axis -- with the ladder read outward from the median in value order, and each rung announced as the percentile it actually is.
Virtual layer comparing candlestick OHLC fields against a reference line (e.g. a moving average). Never declared in MAIDR JSON — created at runtime by the candlestick delta feature (Alt+L to toggle, Ctrl+Shift+L to pick the reference line).
Flow between members of one set, drawn around a circle. Cyclic by construction, so it has no stages -- and every ribbon still follows.
Geographic regions shaded by a value. Read as a bar chart whose categories happen to be places, it loses everything spatial: where the high values sit, which way the gradient runs, and which borders the value jumps across.
A scalar field drawn as curves of constant value. Read as a TraceType.LINE layer the level is just a series name, so the two questions the chart is drawn for -- what value this curve is, and how steeply the field changes here -- both go unanswered.
A directed acyclic graph whose nodes may be nested in named scopes -- a
neural network's architecture as TensorBoard's Graphs dashboard or
Keras' plot_model draws it, or any other computation graph.
Named apart from TraceType.NETWORK rather than as a flag on it, because almost nothing of that trace survives a direction. A network is read by degree, in components, with its links undirected; a model graph is read along its edges, input to output, scope by scope. The point shape differs too: a network derives its nodes from its links, and a graph like this has to declare its nodes, since they carry the attributes (layer type, output shape, parameter count) and the scope a reader needs and a link list has nowhere to put either.
Two series drawn back to back across a shared category axis, one growing left and one growing right -- a population pyramid, or a Likert scale split around a neutral midpoint. Navigated as a TraceType.STACKED layer is, with the one difference that decides whether it reads correctly: the values arrive signed, and the sign is a direction rather than a magnitude, so the pitch takes the size and the announcement names the side.
A category and a value drawn as a point rather than a bar -- a Cleveland dot plot. Read exactly as a TraceType.BAR is; the two differ in the mark, not in what a reader navigates, which is why this carries no model of its own. It exists so the chart announces itself as the chart the author drew.
Two values per category joined by a segment -- before and after, two groups, two years. The gap is the message, so the trace announces the change alongside each end rather than leaving the reader to subtract two numbers they heard one at a time.
An estimate with the interval drawn around it — an error bar, a
confidence interval, a point range. Navigated as a grid of
[lower, value, upper] against the samples, so the reader can move
between the three magnitudes at one x as readily as between samples.
One effect estimate with its interval per study, against a shared null line, with a pooled summary at the foot -- the standard figure of a meta-analysis. Read as an TraceType.ERROR_BAR layer it loses the three things it is drawn for: whether an interval crosses the null, how much each study weighs, and which row is the pooled result rather than evidence.
Intervals along a shared axis, one lane per row -- a gantt chart, a timeline, a swimlane diagram. Each point carries a start and an end rather than a magnitude, so what the reader is told is a span and its length, and where it sits is carried in the panning: a lane's intervals sweep left to right with the axis, so later is audibly later.
A population shrinking across ordered stages. Navigated as a TraceType.BAR layer is, with the one difference that decides whether the chart is readable: the number a reader wants is the retention between adjacent stages, not the count, so that is what the pitch carries. The counts are announced alongside it.
A single measure read against a range -- a gauge, or a bullet chart with its target and qualitative bands. One navigable point whose meaning is entirely relational: 73 says nothing without the 100 it is out of, the 80 it was aiming at, and the band it lands in.
Hexagonal binning: the standard answer to an overplotted scatter. Read as a lattice of cells each carrying a count, which is a TraceType.HEATMAP -- with the one difference that decides its navigation: a hex lattice staggers alternate rows, so a column index does not identify a position. A vertical move keeps the bin whose centre is nearest in x, and the announcement gives the centre rather than the indices.
The same hierarchy as a TraceType.TREEMAP, drawn as depth-ordered bands rather than nested rectangles. The layout differs; the tree does not, so it is read by the same trace.
A dot plot with a stem to the baseline. Read exactly as TraceType.DOT and TraceType.BAR are -- the stem is what the mark looks like, not a second magnitude.
Genomic position against significance -- the standard figure of a GWAS. Read as a TraceType.SCATTER it offers point-by-point navigation over tens of thousands of points, which is not a viable path to the few dozen that matter.
A stacked bar chart whose bar widths also encode data -- a two-way contingency table drawn as tiles. Read as a TraceType.STACKED layer it loses the width entirely, which is half the table: the conditional proportions arrive without the group sizes they were computed from.
A node-link diagram: nodes joined by undirected links, laid out by a force solver or similar. The same graph a TraceType.SANKEY carries with the constraints relaxed -- no stages, no direction -- and with degree in place of magnitude as the thing a reader is after.
TraceType.STACKED_AREA whose bands are shares of a common total.
One polyline per observation across several axes, one axis per variable. Navigated as a multi-line layer -- an observation per row, an axis per column -- with the one difference that decides the chart: every column is a different quantity, so a value is pitched against its OWN axis rather than against one range for the layer.
The distribution of a quantity at each x drawn as nested shaded bands around its median -- TensorBoard's distributions, a forecast fan chart, a quantile band. Read as one TraceType.LINE per quantile, the chart loses that the lines bound nested bands; read as a TraceType.BOX per x it loses the outer quantiles and treats x as categories. Here x is walked as a line is, the median is the tone a reader starts on, up and down walk the band bounds, every point says the median and the band around it, and the description says where the spread widens and narrows most.
Categories arranged around a circle rather than along an axis, drawn as wedges whose radius is the value -- a polar area, coxcomb or rose chart. Read exactly as TraceType.RADAR is; the two differ in the mark, not in what a reader navigates.
A precision-recall curve: a classifier's precision against its recall,
one point per decision threshold, one curve per classifier, class or run
-- scikit-learn's PrecisionRecallDisplay and TensorBoard's PR Curves
dashboard. Shares TraceType.ROC's reading of two rates on the
unit interval, and is read against a different reference: a chance
classifier keeps a precision equal to the prevalence of positives at
every recall, so the baseline is horizontal, the summary is the average
precision against that baseline, and the point of interest is the best
F1 rather than the furthest from a diagonal.
Categories arranged around a circle rather than along an axis, joined into a closed outline -- a radar or spider chart. Navigated as a multi-line layer, with each spoke a column and each series a row; what the circle adds is that a spoke's stereo position follows its angle rather than its index, so a sweep goes out and comes back.
One density curve per group along a shared value axis, the curves offset down the page so their shapes can be compared. The offset is presentation -- it exists so the curves do not overlap illegibly -- so a layer carries each group's curve on its own terms and never the baseline it was drawn from. Reading it as a TraceType.VIOLIN_KDE pitches every group against a reference curve, which answers a different question than the one a ridgeline is drawn to ask.
A receiver operating characteristic curve: a classifier's true positive rate against its false positive rate, one point per decision threshold, one curve per classifier. Structurally a multi-line layer, and read as one it answers the wrong questions: the min and max are always 0 and 1, the pitch is scaled to each curve's own range so two classifiers sound alike, and the numbers the chart is drawn for -- the area under each curve, and how far each point sits above the chance diagonal -- are never said. Here the pitch is the rate on the unit interval, the pan follows the false positive rate, every point announces its threshold and its distance above chance, and the description gives the area and the best operating point.
Observations drawn as ticks along one axis -- a rug. The chart has one quantity per observation, its position, and is drawn to show where the observations fall and where they bunch up. Read as a TraceType.SCATTER whose other coordinate is a constant, every tick sounds the same note and the clustering reaches the reader only as text, one observation at a time (#1132). Here the position is what the pitch carries, and the braille is the observation count along the axis.
Weighted flow between nodes, drawn as ribbons whose width is the magnitude. The chart exists to show routing and proportion at once, which is a question about topology -- and there is no partial reading of it available on a grid, because the chart is a graph.
A scatter for data with ties, where several observations landing on one coordinate are drawn as a single mark with that many petals.
Read by ScatterTrace, over plain ScatterPoints whose z
is how many observations are on the mark -- z being announced with its
axis label and driving the intensity, so the multiplicity is both spoken
and audible rather than a field the reader has to go looking for.
Named apart from TraceType.SCATTER for a reason stronger than the one TraceType.TREE gives. It is not only that "scatter plot" names a chart nobody drew: a sunflower plot's marks are not its observations. Sixty observations come back as twenty-one marks, because coincident ones were collapsed -- which is the single fact the chart was chosen to convey. A reader told "scatter" has been told the marks are the data, and here they are not.
Area bands stacked on one another, so a band's height is its own series' value while the band's top edge is the running total. Reading such a layer as a TraceType.LINE announces one number where the chart draws two, with nothing to say which one was heard — which is why this is a type of its own rather than a line with a fill.
A hierarchy drawn as nested rectangles whose area is a magnitude. It is the first trace type that is not a flat grid: a node's address is its depth and its position within that depth, and the arrow keys move between parent, child and sibling rather than along rows and columns.
The same hierarchy as a TraceType.TREEMAP, drawn as boxes joined by links rather than as nested areas. The tree does not differ and the painting does, so it is read by the same trace and named apart only so that the reader is told what is on the page: an organization chart announced as a treemap is a chart type nobody drew.
The magnitude is commonly absent here -- a reporting line has no size -- which is the case TreemapPoint.y being optional exists for.
The same hierarchy as a TraceType.TREEMAP, drawn as circles nested inside circles rather than as nested rectangles. Sized by value like a treemap and navigated identically, and named apart for the reason TraceType.TREE is: the reader is told which chart is on the page, and a circle-packing diagram announced as a treemap is a chart type nobody drew.
The same hierarchy as a TraceType.TREEMAP, drawn as rings around a centre rather than as nested rectangles. The layout differs and the tree does not, so it is read by the same trace -- with one thing of its own: the rings are angular, so the sound is panned around the dial the way a pie's is, and sweeping a ring goes out and comes back.
A Kaplan-Meier survival curve: the probability of surviving past each time, dropping in steps as events occur. Read as a TraceType.STEP layer it loses the two facts the figure is drawn for -- the median survival, which is the number most readers came for, and which times are censored rather than events.
Effect size against significance -- the standard figure of a differential expression analysis. Read as a TraceType.SCATTER it announces the two coordinates and withholds the point's identity, which is the payload.
A sequence of signed contributions carrying a starting value to an ending one — the staple of financial and product reporting. Each step draws a floating bar from its running total before to its running total after, so the point carries both the contribution and the total it produced.
Terms sized by weight. The layout carries no information -- it is chosen to pack glyphs, not to encode anything -- so the trace reads it as what it measures: a term and a magnitude, walked in weight order.
Enumeration of supported plot trace types. Use these values for the
typefield in MaidrLayer.Example