Skip to content
microcharts
ReferenceCoreSeismogram

Seismogram

Seismogram traces when events happened and how hard, as ticks centered on a midline.

encodes
tick presence (density) + height (intensity)
precision
medium — Sparkline for levels, EventTimeline for labeled events
nodes
≤ 2 typical (tick path; +1 flag path, +1 signed midline)
collection
Core
Source

Errors arrive in bursts, and the question is when they hit and how hard. Seismogram centers its ticks on a midline and flares them symmetrically: density is presence, length is intensity. The centered trace keeps the strip from inviting the bar-to-bar magnitude comparison it is too small to support, and keeps it visually distinct from SparkBar. Long series collapse via max-per-bucket only, so a spike always survives, and the summary is computed from the raw values rather than the buckets.

Seismogram
interactive · 5.3 kB · static · 2.7 kB

Install

Import & usereact/seismogram
import { Seismogram } from "@microcharts/react/seismogram";// burstsPerMinute — real values under “Sample data” below<Seismogram data={burstsPerMinute} title="Error bursts" />
Sample data
const burstsPerMinute = [  1, 2, 1, 3, 2, 6, 2, 1, 0, 2, 1, 4, 9, 3, 1, 2,  0, 1, 3, 2, 7, 2, 1, 0, 2, 1, 5, 11, 3, 1, 2, 1,];
Needs package + stylesheetSet up with AI

Try it

Live playground
onActive
idle
  1. hover · rove · click…

Hover or arrow through the slots; Home/End jump to the first/last event.

mode
signed data
flag spikes
fixed domain [0, 20]
readout
animate
import { Seismogram } from "@microcharts/react/seismogram/interactive";// burstsPerMinute — real values under “Sample data” below<Seismogram  data={burstsPerMinute}/>
Sample data
const burstsPerMinute = [  1, 2, 1, 3, 2, 6, 2, 1, 0, 2, 1, 4, 9, 3, 1, 2,  0, 1, 3, 2, 7, 2, 1, 0, 2, 1, 5, 11, 3, 1, 2, 1,];

When to use it

Use it for error bursts per service, alert density, and activity texture in table rows. For level tracking use Sparkline; for labeled events use EventTimeline.

Sizing

table row
barcode (presence only)
flag anomalies

Variants

barcode

In barcode mode every tick is the same length: it records presence and carries no magnitude.

signed shocks
flag anomalies

anomaly flags spikes at or above its threshold in the alert token, on top of the tick length that already shows them, so the flag never rests on color alone.

locale

format also takes Intl.NumberFormatOptions — with a locale, the accessible summary's peak number follows that locale's own grouping ("12.500" in German, not "12,500"). Tick positions and lengths are unaffected; only the announced peak is localized.

Edge cases

quiet strip
long series — spikes survive downsampling

All-zero data renders the baseline at rest rather than a blank hole. A series longer than the pixel width collapses by max-per-bucket, so a single sharp spike is never averaged away.

Four homes

In a sentence

Checkout errors this hour — 29 events, spiking to 11 at minute 28.

In a table cell
checkout-api29 events
auth-api10 events
search-api11 events
In a KPI card
Checkout error bursts
29events/hr · peak 11
In a tab header
checkout-apiauth-apisearch-api

Preview uses the public chart API only. When an interactive twin exists, it swaps in with the same props and no entrance motion - code samples stay on the static import. Placement recipes: Composition, Sizing.

Accessibility

The accessible name counts the events: "29 events, peak 11.", or "No events." for a quiet strip. The interactive entry steps slots with position readouts ("Point 2 of 5: 3."). A quiet slot reads as the zero it is ("Point 1 of 5: 0."), and only a missing sample announces "no data". Home and End jump to the first and last event.

The interactive entry follows the shared interaction contract: arrow keys rove between units on both axes, Home and End jump to the ends, and a click, tap, Enter or Space selects a unit — pinning its readout so it survives blur, until you select it again, press Escape, or press outside the chart. On touch, a tap pins and a drag scrubs.

Props

PropTypeNotes
data*(number | null)[]Per-slot event intensity; 0/null = quiet.
mode"intensity" | "barcode"Barcode collapses heights — pure occurrence density.
positive"up" | "down"Polarity coloring of signed ticks.
anomalynumberFlag spikes: |v| ≥ threshold flares in the alert token.
domain[number, number]Fixed intensity scale across rows.
animatebooleaninteractiveOpt-in entrance motion when the chart mounts client-side — add import "@microcharts/react/motion" once. Inert on the server, on hydrated server HTML, and under prefers-reduced-motion.

Plus the shared grammar — data, domain, color, title, summary, format — and the layout props (width, height, className, style) that every chart accepts. Interactive entries also share animate and live, and — wherever a chart has more than one navigable unit — onActive, onSelect, selectedIndex and defaultSelectedIndex; and — wherever the chart shows a hover value — readout. See the shared grammar.

Related charts