Graphique d'écart
Comparaison
À quel point les deux chiffres qui comptent sont-ils éloignés ? Tracez avant et après, cible et réel, hommes et femmes, et la barre entre eux est l'histoire - plus l'écart est large, plus fort il résonne.
Le graphique ci-dessus est le même moteur dans chaque framework - seul le code d'intégration ci-dessous diffère.
Quand le choisir
- Cible contre réel, avant contre après, prévision contre résultat. Deux valeurs par ligne où la distance entre elles est le message principal - la barre d'écart EST la conclusion.
- Classer par écart. Triez les lignes et les plus belles réussites (ou les pires échecs) ressortent instantanément - conçu pour la revue du lundi matin : qui a comblé son écart ?
- Si les valeurs absolues comptent plus que la différence, des sous-barres côte à côte sur une barre comparable gardent les deux grandeurs lisibles.
Données volumineuses sur WebGPU Expérimental
GapChart dispose d'un renderer="webgpu" optionnel qui peint les marqueurs value1/value2 et les barres de connexion comme des formes instanciées sur le GPU tandis que les axes, étiquettes et infobulles restent sur la couche SVG. C'est conditionné par les capacités du navigateur : sur un navigateur sans WebGPU, il rétrograde automatiquement vers canvas, et getContext().renderer indique lequel a effectivement peint.
Faire defiler les annees
Donnez un date à chaque ligne et activez timeline : le graphique devient un récit année par année, avec son propre bouton lecture et son curseur, un instantané à la fois. Désactivé par défaut - sans opt-in, rien ne change.
Appuyez sur le bouton lecture sous le graphique : les données défilent année par année, un instantané à la fois. Faites glisser le curseur pour sauter à une année.
const ref = useRef<GapChartHandle>(null);
<GapChart ref={ref} {...props} timeline={{ speedMs: 1000, loop: true }} />;
// ref.current?.timeline() -> play() / pause() / seek(year) / stepForward()<GapChart :options="{ ...props, timeline: { speedMs: 1000, loop: true } }" /><div use:gapChart={{ ...props, timeline: { speedMs: 1000, loop: true } }}></div>applyGapChartProps(this.c.nativeElement, { ...props, timeline: { speedMs: 1000, loop: true } });<michi-vz-gap-chart id="c"></michi-vz-gap-chart>
<script>
const el = document.getElementById("c");
el.timeline = { speedMs: 1000, loop: true };
// el.getTimeline() -> play() / pause() / seek(year)
</script>speedMsrègle le rythme,loopreboucle,autoplay: truedémarre au montage,showControl: falsemasque la barre intégrée.- Les valeurs glissent d'une période à l'autre par défaut (
interpolate) ; ajustez le mouvement avectweenMseteasing, ou passezinterpolate: falsepour des coupes nettes. Avec reduced motion, la coupe est toujours nette. - Le contrôleur headless reste disponible :
chart.timeline()exposeplay() / pause() / toggle() / seek(period) / stepForward() / stepBack(), plusonStepetformatPerioddans la config pour une UI maison. - Un
filter(top-N, tri) s'applique toujours à l'intérieur de chaque période : un « top 5 par an » fonctionne d'emblée. - Les lignes sans
daterestent visibles à chaque période.
Usage
import { GapChart } from "@michi-vz/react";
export default () => <GapChart {...props} />; // props = the chart options<script setup>
import { GapChart } from "@michi-vz/vue";
</script>
<template>
<GapChart :options="props" />
</template><script>
import { gapChart } from "@michi-vz/svelte";
</script>
<div use:gapChart={props}></div>// main.ts - register the elements once
import "@michi-vz/angular";
import { applyGapChartProps } from "@michi-vz/angular";
// component (uses CUSTOM_ELEMENTS_SCHEMA)
// template: <michi-vz-gap-chart #c></michi-vz-gap-chart>
applyGapChartProps(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-gap-chart id="c"></michi-vz-gap-chart>
<script>
Object.assign(document.getElementById("c"), props); // dataSet/series, title, …
</script>import { mountGapChart } from "@michi-vz/core";
const chart = mountGapChart(el, props);
chart.update(next);
chart.getContext(); // renderer-agnostic, LLM-ready
chart.destroy();API
Les props sont typées comme GapChartProps dans @michi-vz/core. Communes à tous les graphiques : width, height, margin, colors / colorsMapping, renderer ("svg", "canvas", ou expérimentalement "webgpu"), highlightItems, disabledItems, et les callbacks on*. onChartDataProcessed / getContext() renvoient le ChartContext agnostique du moteur de rendu.
