Bereikdiagram
Trends
"Hoe breed is de spreiding?" Wanneer een enkele lijn een vertekend beeld van je data geeft, teken dan de band in plaats daarvan. Beste geval tot slechtste geval, de prognosekegel, het 5e-tot-95e percentiel - dit arceert het volledige bereik per reeks zodat onzekerheid iets is wat de lezer kan zien, niet naar hoeft te raden.
De grafiek hierboven is dezelfde engine in elk framework - alleen de integratiecode hieronder verschilt.
Wanneer kies je deze
- Wanneer een enkele lijn je zekerheid zou overdrijven. Prognosekegels, 5e-tot-95e-percentielbanden, best-tot-slechtste scenario's: de breedte van de band is het eerlijke antwoord.
- Volatiliteit tussen reeksen vergelijken. Een brede band naast een smalle is een risicoverhaal dat geen gemiddelde overbrengt - portefeuillespreiding, SLA-jitter, temperatuurbereiken.
- Geneste betrouwbaarheidsniveaus rond één prognose? Precies dat stelt het waaierdiagram voor je samen, banden en mediaan in één aanroep.
Veel data op WebGPU Experimenteel
RangeChart heeft een optionele renderer="webgpu" die de min/max-banden tekent als GPU-instanced geometrie, terwijl assen, labels en tooltips op de SVG-laag blijven. Dit is capability-gated: in een browser zonder WebGPU wordt automatisch teruggevallen op canvas, en getContext().renderer rapporteert wat daadwerkelijk is getekend.
Onthulanimatie
De grafiek tekent zichzelf van links naar rechts bij het mounten, waarbij de elementen na elkaar verschijnen voordat ze op hun plek vallen. Standaard uit - een grafiek kiest ervoor met de progressiveDraw-prop.
Elke lijn groeit van het eerste naar het laatste jaar; het label volgt de punt en komt tot stilstand bij het lijneinde. Met reduced motion ingeschakeld verschijnt de grafiek meteen volledig getekend.
progressiveDraw: true gebruikt de standaardinstellingen (1200 ms, easeInOutCubic). Een configuratieobject verfijnt het gedrag:
const ref = useRef<RangeChartHandle>(null);
<RangeChart
ref={ref}
{...props}
progressiveDraw={{ durationMs: 2000 }}
/>;
// ref.current?.replay() speelt de animatie opnieuw af<RangeChart :options="{ ...props, progressiveDraw: { durationMs: 2000 } }" /><div use:rangeChart={{ ...props, progressiveDraw: { durationMs: 2000 } }}></div>applyRangeChartProps(this.c.nativeElement, {
...props,
progressiveDraw: { durationMs: 2000 },
});<michi-vz-range-chart id="c"></michi-vz-range-chart>
<script>
const el = document.getElementById("c");
el.progressiveDraw = { durationMs: 2000 };
// el.replay() speelt de animatie opnieuw af
</script>durationMseneasing("linear", "easeOutQuad", "easeInOutCubic", of een eigen(t) => t-functie) bepalen het tempo.autoplay: falserendert de grafiek volledig getekend; roepreplay()aan (React-ref-handle, webcomponent-methode of de core-instantie) om de animatie op aanvraag te starten.replayOnUpdate: trueherhaalt de animatie bij elke datawijziging.- Respecteert
prefers-reduced-motion: de grafiek verschijnt dan meteen volledig getekend.
Speel door de jaren heen
De data beslaat al meerdere jaren, dus er is niets te taggen. Zet timeline aan: de eigen afspeelknop en scrubber van de grafiek stappen door die jaren - bij elke stap tekenen de banden zich alleen tot het actieve jaar, en tijdens het afspelen lopen ze vloeiend verder door. Scrub je terug, dan trekken de banden zich weer terug. Hoveren toont alleen wat al echt getekend is. Standaard uit - zonder opt-in verandert er niets.
Druk op de afspeelknop onder de grafiek: de grafiek tekent zich verder door tot elk jaar terwijl hij speelt. Sleep de scrubber om naar een jaar te springen.
const ref = useRef<RangeChartHandle>(null);
<RangeChart ref={ref} {...props} timeline={{ speedMs: 1000, loop: true }} />;
// ref.current?.timeline() -> play() / pause() / seek(year) / stepForward()<RangeChart :options="{ ...props, timeline: { speedMs: 1000, loop: true } }" /><div use:rangeChart={{ ...props, timeline: { speedMs: 1000, loop: true } }}></div>applyRangeChartProps(this.c.nativeElement, { ...props, timeline: { speedMs: 1000, loop: true } });<michi-vz-range-chart id="c"></michi-vz-range-chart>
<script>
const el = document.getElementById("c");
el.timeline = { speedMs: 1000, loop: true };
// el.getTimeline() -> play() / pause() / seek(year)
</script>speedMsbepaalt het tempo,loopbegint opnieuw,autoplay: truestart bij mounten,showControl: falseverbergt de ingebouwde balk.- De headless controller is altijd beschikbaar:
chart.timeline()biedtplay() / pause() / toggle() / seek(period) / stepForward() / stepBack(), plusonStepenformatPeriodin de config voor eigen UI. - Waarden glijden standaard tussen jaren (
interpolate); zetinterpolate: falsevoor harde overgangen. Met reduced motion is de overgang altijd hard. timelinewint het vanprogressiveDrawwanneer beide op dezelfde grafiek staan.
Gebruik
import { RangeChart } from "@michi-vz/react";
export default () => <RangeChart {...props} />; // props = the chart options<script setup>
import { RangeChart } from "@michi-vz/vue";
</script>
<template>
<RangeChart :options="props" />
</template><script>
import { rangeChart } from "@michi-vz/svelte";
</script>
<div use:rangeChart={props}></div>// main.ts - register the elements once
import "@michi-vz/angular";
import { applyRangeChartProps } from "@michi-vz/angular";
// component (uses CUSTOM_ELEMENTS_SCHEMA)
// template: <michi-vz-range-chart #c></michi-vz-range-chart>
applyRangeChartProps(this.c.nativeElement, props);<script type="module" src="https://cdn.jsdelivr.net/npm/@michi-vz/wc/dist/michi-vz-wc.bundle.js"></script>
<michi-vz-range-chart id="c"></michi-vz-range-chart>
<script>
Object.assign(document.getElementById("c"), props); // dataSet/series, title, …
</script>import { mountRangeChart } from "@michi-vz/core";
const chart = mountRangeChart(el, props);
chart.update(next);
chart.getContext(); // renderer-agnostic, LLM-ready
chart.destroy();API
Props zijn getypeerd als RangeChartProps in @michi-vz/core. Gedeeld door alle grafieken: width, height, margin, colors / colorsMapping, renderer ("svg", "canvas", of experimenteel "webgpu"), highlightItems, disabledItems, en de on*-callbacks. onChartDataProcessed / getContext() retourneren de renderer-agnostische ChartContext.
