Browse docs
Parallel coordinates
Compare experiment settings and outcomes in one plot. Each line is a run; its axes can mix continuous values such as learning rate with categories such as optimizer.
Experiment selection and table linkage
Select a line, button, or table checkbox below. They share selected experiment IDs, which also survive hiding an axis.
Gaps mean missing or unplottable values. Hover a trace or focus an experiment for its values.
| Select | Experiment | Learning rate | Batch size | Hidden units | Optimizer | Eval score |
|---|---|---|---|---|---|---|
| run-a | 1.0e-3 | 64 | 256 | AdamW | 84 | |
| run-b | 2.0e-4 | 128 | 512 | Adam | 93 | |
| run-c | 8.0e-3 | 32 | 128 | SGD | 65 | |
| run-d | 4.0e-3 | 256 | 384 | AdamW | 78 | |
| run-e | 5.0e-4 | 64 | Missing | Adam | 89 | |
| run-f | 2.0e-3 | 128 | 192 | SGD | 72 |
Synthetic data. run-e has no recorded hidden-unit value: its trace breaks at that axis. Axis visibility and table filtering preserve selection. Each row checkbox works with the keyboard.
Code ExperimentComparisonSpec.tsx
The example implements “Select top 2” and table filtering outside the chart. Reuse the reported IDs for your own table or detail view.
Data and controlled state
Define axes in display order and key each run's values by axis ID:
Keep axis and experiment IDs unique and stable. Continuous values must be
numbers; convert numeric strings before rendering. Categorical values follow
categories from bottom to top.
Axes and missing values
Continuous axes fit finite data with readable ticks.
Set a finite, increasing domain for a fixed scale. Invalid domains fall back
to automatic fitting; constant and empty data still receive a finite range.
Missing or non-finite values, unknown categories, and values outside a fixed domain break the trace. A lone valid value appears as a point. Experiment buttons retain the values in accessible text.
Wire both selectedIds and onSelectionChange to apply selection changes.
Without the callback, selection is read-only. visibleAxisIds filters the axes
without changing their declared order.
Props
| Prop | Type | Default | Purpose |
|---|---|---|---|
axes | readonly ParallelCoordinatesAxis[] | required | Axes in display order. |
series | readonly ParallelCoordinatesSeries[] | required | Experiments with stable IDs, labels, values, and optional CSS colors. |
selectedIds | readonly string[] | [] | Selected experiment IDs. |
onSelectionChange | (ids: string[]) => void | — | Receive the requested selection. |
visibleAxisIds | readonly string[] | all axes | Axes to display, in axes order. |
title | string | 'Experiment comparison' | Visible and accessible chart name. |
className | string | — | Root CSS classes. |
Use at least two visible axes. The plot scrolls horizontally when needed; brushing and axis-reordering controls are not included. Start with a small comparison set.