Choose a chart
Start with the question the chart must answer, then choose the simplest form that makes the comparison visible. Each example link shows runnable source and rendered output; each API link gives the exact parameters and constraints.
If terms such as mark, encoding, or domain are unfamiliar, see the
Glossary. Which Theme flags and Plot settings each mark honors – tooltips,
data labels, horizontal orientation, annotations, log scales, color and
size channels – is on Feature support.
If one convenience function describes the result, use it. Reach for Plot()
when you need layers, facets, or additional encodings. Both approaches return
the same Plot type.
Compare categories
| Chart | Use it when | Required data | Watch for | Links |
|---|---|---|---|---|
| Bar | Comparing one value across categories | Category and value columns | A long category list becomes hard to scan; consider horizontal bars | Example · API |
| Grouped bar | Comparing several series within each category | Categories, series names, and one value list per series | Too many series make each group crowded | Example · API |
| Lollipop | Showing a light-weight ranking or category comparison | Category and value columns | Thin stems are less effective for precise baseline comparisons than bars | Example · API |
| Bullet | Comparing actual, target, and qualitative ranges | One row per measure with value, target, and ranges | Best for a small dashboard set, not a long categorical distribution | Example · API |
| Population pyramid | Comparing two groups across ordered categories | Categories plus left and right value columns | The two sides must use a common scale to support comparison | Example · API |
| Slope | Comparing two endpoints for each series | Two x positions and paired series values | More than two or three time points usually calls for a line chart | Example · Line API |
| Bump | Showing rank changes across ordered periods | Periods, series names, and raw values by series | It shows computed rank, not the magnitude behind the rank | Example · API |
Show change over time
| Chart | Use it when | Required data | Watch for | Links |
|---|---|---|---|---|
| Line | Showing continuous change or a connected sequence | Numeric x and y columns | Rows connect in input order; sort time data first | Example · API |
| Step | Showing values that remain constant until the next observation | Numeric x and y columns | Choose the step position to match when a new value takes effect | Example · Line API |
| Area | Emphasizing magnitude over a continuous baseline | Numeric x and y columns | Filled shapes can hide overlapping series | Example · API |
| Stepped area | Showing piecewise-constant magnitude over time | Numeric x and y columns | The same step-position semantics as a step line apply | Example · Area API |
| Stacked area | Showing total and component change together | Ordered categories, series names, and values by series | Middle series have no stable baseline for precise comparison | Example · API |
| Streamgraph | Showing the changing composition of many series | Ordered categories, series names, and values by series | The centered baseline prioritizes overall shape over exact values | Example · API |
| Waterfall | Explaining sequential additions and subtractions to a total | Ordered categories and signed deltas | Mark subtotal or total rows explicitly | Example · API |
| Gantt | Showing scheduled intervals by task | Task names, start values, and end values | Overlapping tasks need ordering chosen before plotting | Example · API |
| Span | Comparing intervals without implying a project schedule | Categories, starts, and ends | It communicates ranges, not a continuous trajectory | Example · API |
| Candlestick | Showing open, high, low, and close values by period | Ordered period plus OHLC columns | It is specialized for interval price movement, not general uncertainty | Example · API |
| Calendar heatmap | Finding daily patterns across weeks and months | Dates and one value per date | Color is less precise than position; label or annotate critical values | Example · API |
Show distributions
| Chart | Use it when | Required data | Watch for | Links |
|---|---|---|---|---|
| Histogram | Seeing the shape of one numeric distribution | Raw numeric observations | The bin rule can change the apparent shape | Example · API |
| Shared-bin histograms | Comparing distributions on identical intervals | Several samples and common bin edges | Separate bins make panels look comparable when they are not | Example · Binning API |
| Automatic-bin histogram | Choosing a data-dependent starting bin count | Raw numeric observations and a bin rule | Treat the automatic choice as a starting point, not a universal optimum | Example · Bin rules |
| Box plot | Comparing median, spread, and outliers across groups | Categories and one raw-value list per category | Multimodal distributions can look deceptively similar | Example · API |
| Violin | Comparing full density shapes across groups | Categories and one raw-value list per category | Density depends on bandwidth and is less stable for small samples | Example · API |
| Beeswarm | Showing every observation while separating overlaps | Categories and one raw-value list per category | Large samples become dense and expensive to lay out | Example · API |
| Ridgeline | Comparing many distribution shapes compactly | Categories and one raw-value list per category | Overlap and independent density scaling can hinder magnitude comparison | Example · API |
| Density curve | Showing a smoothed distribution | Raw numeric observations | Bandwidth controls how much structure is smoothed away | Example · API |
| Rug | Showing exact observation positions beneath another distribution view | Raw numeric observations | A rug alone becomes unreadable with many repeated or dense values | Example · API |
| ECDF | Comparing cumulative proportions without choosing bins | Raw numeric observations | It emphasizes ranks and thresholds rather than local density | Example · API |
| Event plot | Comparing event positions across labeled rows | Row labels and one position list per row | It shows occurrence, not duration or magnitude | Example · API |
Show relationships and many variables
| Chart | Use it when | Required data | Watch for | Links |
|---|---|---|---|---|
| Scatter | Seeing association, clusters, and outliers between two variables | Numeric x and y columns | Overplotting can hide density | Example · API |
| Effect scatter | Emphasizing points with a halo or visual effect | Numeric x and y columns | Decoration should not substitute for an actual data encoding | Example · API |
| Single axis | Showing values along one numeric dimension | One numeric position per observation | Coincident values overlap without another distinguishing channel | Example · API |
| Correlation plot | Scanning pairwise correlations across variables | Variable names and a square correlation matrix | Correlation does not establish causation or expose nonlinear structure | Example · API |
| Parallel coordinates | Comparing observations across many numeric dimensions | One value list per observation and dimension names | Axis order and scaling strongly affect visible patterns | Example · API |
| Radar | Comparing a few named profiles across common indicators | Indicators, maxima, series names, and values by series | Area and angle make precise cross-axis comparisons difficult | Example · API |
| Polar line | Showing a relationship naturally expressed as angle and radius | Angle and radius columns | Cartesian alternatives are usually easier to read without a circular domain | Example · API |
| Multi-series polar | Comparing several angle-radius paths | Angles, series names, and radius values by series | Multiple paths can overlap heavily | Example · API |
| Wind barbs | Showing vector direction and magnitude at positions | x and y positions plus u and v vector components | Dense fields need enough canvas space to keep glyphs distinct | Example · API |
Show composition and progress
| Chart | Use it when | Required data | Watch for | Links |
|---|---|---|---|---|
| Stacked bar | Comparing category totals and their components | Categories, series names, and one value list per series | Interior segments are difficult to compare across bars | Example · API |
| Pie or donut | Showing a small number of parts of one whole | Categories and non-negative values | Angles are hard to compare; avoid many similar slices | Example · API |
| Marimekko | Showing two categorical proportions at once | Categories, subcategories, and a subcategory-by-category matrix | Both width and height vary, making exact comparison difficult | Example · API |
| Funnel | Showing values across ordered process stages | Stage names and non-negative values | Width implies magnitude, not causal conversion between stages | Example · API |
| Gauge | Showing one value against a bounded target range | Value plus minimum and maximum | Space-inefficient for comparing many values | Example · API |
| Nightingale rose | Comparing magnitudes around a categorical circle | Categories and non-negative values | Radius can exaggerate area unless the intended scaling is clear | Example · API |
| Polar bar | Comparing bars along an angular axis | Categories and non-negative values | Circular position makes ordinary category comparison harder | Example · API |
| Radial bar | Showing category progress around a circle | Categories and non-negative values | A linear bar is more precise when radial layout adds no meaning | Example · API |
Show hierarchies
All three hierarchy charts use flattened ids, parent_ids, and leaf
values. Exactly one row is the root.
| Chart | Use it when | Watch for | Links |
|---|---|---|---|
| Tree | Emphasizing parent-child structure | Deep or broad trees need substantial space | Example · API |
| Treemap | Comparing leaf size within a hierarchy | Small rectangles leave little room for labels | Example · API |
| Sunburst | Showing hierarchy depth and part-to-whole size together | Outer arcs are harder to compare and label | Example · API |
Show flows and networks
These charts use parallel source, destination, and non-negative value columns.
| Chart | Use it when | Watch for | Links |
|---|---|---|---|
| Sankey | Tracing quantities through directed stages | The graph must be acyclic; crossing flows quickly add clutter | Example · API |
| Chord | Showing weighted connections among a moderate set of entities | Direction and exact values are difficult to compare in a dense circle | Example · API |
| Arc diagram | Showing connections while preserving a meaningful node order | Long arcs can obscure local structure | Example · API |
| Graph | Showing general relationships among nodes | The circular layout is deterministic but does not discover communities | Example · API |
Show grids, matrices, and fields
| Chart | Use it when | Required data | Watch for | Links |
|---|---|---|---|---|
| Heatmap | Comparing values across two categorical dimensions | Long-form x, y, and value columns | Color supports pattern finding better than exact lookup | Example · API |
| Image | Displaying a regular row-major numeric array | A rectangular z[row][column] matrix |
Row zero appears at the top; size the plot deliberately when aspect matters | Example · API |
| Pseudocolor mesh | Displaying a matrix over unequal cell boundaries | x edges, y edges, and a rectangular matrix | Each edge list has one more entry than its matrix dimension | Example · API |
| Contour or filled contour | Showing levels across a regular sampled surface | x coordinates, y coordinates, and a rectangular grid | At least a 2-by-2 grid is required; level choices affect the story | Line example · Filled example · Line API · Filled API |
| Scattered contour | Estimating levels from irregularly positioned samples | x, y, values, and triangulation-compatible points | Sparse or poorly distributed points can create misleading triangles | Line example · Filled example · Line API · Filled API |
| Triangular mesh | Inspecting or coloring an irregular triangulation | Point x/y coordinates and, for color, one value per point | The Delaunay mesh quality depends on the point distribution | Mesh example · Color example · Mesh API · Color API |
| Punchcard | Comparing activity across two categorical cycles | Two categorical columns and values | Large category products produce many small cells | Example · API |
Show three dimensions
Reach for these last. A projection collapses three dimensions onto two, so two points that look adjacent may be far apart along the view direction, and every solid hides whatever stands behind it. When the question is about two variables, or about reading a value, a 2D chart above answers it exactly; these answer “what does the whole field look like”.
| Chart | Use it when | Required data | Watch for | Links |
|---|---|---|---|---|
| 3D scatter | Looking for clusters or a trend that needs all three variables at once | Equal-length x, y, and z columns | Depth is lost to the view; rotate elev/azim and compare before trusting an apparent cluster |
Example · API |
| 3D line | Following one path through space in order | Ordered x, y, and z columns | Segments draw in data order, not depth order, so a later segment covers an earlier one it passes behind | Example · API |
| Surface or wireframe | Showing the shape of a height field – ridges, saddles, where it falls away | A rectangular z[row][col] grid, optional x and y coordinates |
Reads values worse than a contour or heatmap of the same grid; the wireframe keeps the far side visible but turns dense grids into a thicket | Surface example · Wireframe example · Surface API · Wireframe API |
| Triangulated surface | The same, from samples that do not sit on a grid | Scattered x, y, and one z per point | Fills across the convex hull, so a concave sampled region gets bridged; one z per (x, y) means no overhangs | Example · API |
| 3D bars | Comparing a value over two axes when the shape of the field matters more than any one value | Bar centers x and y with heights z | Every bar hides the ones behind it; a heatmap of the same values hides nothing | Example · API |
| Voxels | Displaying a blocky solid – an occupancy grid, a segmentation | filled[layer][row][col] booleans |
Only the surface is visible; structure inside the solid needs slices, not this | Example · API |
| 3D stems | Reading heights at scattered positions, each tethered to the plane | Equal-length x, y, and z columns | Stems always rise from zero; crossing stems cross visibly whichever was drawn last | Example · API |
| 3D arrows | Sampling a vector field at points | Positions x, y, z and components u, v, w | Heads are sized on the page and never foreshorten, so an arrow pointing at the reader keeps a full head on no shaft | Example · API |
| 3D ribbon | Showing the gap between two curves through space | Two curves with the same number of samples | Where the curves cross, the ribbon pinches; there is no correct draw order at a fold | Example · API |
When several charts could work, build the simplest two with the same data and compare what becomes easiest to see. The Examples gallery provides the fastest side-by-side source and output reference.