Zum Inhalt springen
    WingoUI
    KomponentenVorlagenDokuPreiseKI-AgentenBlogChangelog
    1. Startseite
    2. Blog
    3. Komponenten-Guides
    4. React Gauge Chart: Zonen, Zielwerte und kleine Größen
    Read in English
    1. Blog
    2. Komponenten-Guides
    3. React Gauge Chart: Zonen, Zielwerte und kleine Größen
    Komponenten-Guides
    Komponenten-Guides

    React Gauge Chart: Zonen, Zielwerte und kleine Größen

    SR
    Serban Rusu · Gründer von Wingo UI
    19. Okt. 2026 · 9 Min. Lesezeit

    Auf dieser Seite

    0%
    1. Wann nehme ich ein Gauge Chart statt eines Balkens oder Rings?
    2. Welche Pakete für React Gauge Charts gibt es?
    3. Welche Props braucht ein React Gauge Chart?
    4. Wie bleibt ein Gauge bei kleinen Größen lesbar?
    5. Wie zeige ich einen Wert, bei dem weniger besser ist?
    6. Wie zeige ich mehrere Ziele als React Radial Progress Chart?
    7. Wie mache ich ein Gauge Chart barrierefrei?
    8. Was sind die typischen Fehler bei einem Gauge Chart?
    9. Wie füge ich es meinem Projekt hinzu?
    10. Häufige Fragen
      1. Wie baue ich ein Gauge Chart in React?
      2. Was ist der Unterschied zwischen einem Gauge und einem Radial Bar Chart?
      3. Welche ARIA-Rolle sollte ein Gauge haben?
      4. Kann ich ein React Gauge Chart in Next.js mit Server-Rendering nutzen?
      5. Sind Gauge und Radial Bar von Wingo UI kostenlos?

    Kurz gesagt

    Ein React Gauge Chart zeigt einen Wert auf einer festen Skala, als Bogen, Nadel oder Segmente, gefärbt nach der Zone, in der der Wert liegt, mit einer Zielmarkierung und einem Label, das lesbar bleiben muss, wenn das Instrument auf 120px schrumpft. Nimm ein Gauge für eine Zahl mit Zonen, Radial Bars für mehrere Ziele, die sich jeweils bis zu ihrem eigenen Zielwert füllen, und einen einfachen Progress-Ring, wenn du nur einen Prozentwert brauchst. Gauge und Radial Bar von Wingo UI erledigen das über Props und melden sich bei Screenreadern als Meter.

    Veröffentlicht am 19. Okt. 2026

    Du brauchst ein React Gauge Chart für ein Dashboard: Umsatz gemessen am Monatsziel, ein NPS-Wert, ein Support-SLA, die Festplattenbelegung. Eine Zahl, eine Skala und ein Gefühl dafür, ob die Zahl gut oder schlecht ist. Die erste Version ist meist ein SVG-Bogen mit einer großen Zahl in der Mitte, und bei 280px sieht sie gut aus. Dann landet sie in einer KPI-Karte mit 120px: Das Label läuft über den Bogen hinaus, Minimum und Maximum kollidieren mit den Bogenenden, und ein Screenreader kündigt ein Bild ohne Beschriftung an. Dieser Guide zeigt, wann ein Gauge das richtige Diagramm ist, welche Props in Gauge und Radial Bar von Wingo UI zählen und wie beide auf dem Smartphone lesbar bleiben.

    Wann nehme ich ein Gauge Chart statt eines Balkens oder Rings?

    Nimm ein Gauge, wenn ein einzelner Wert auf einer Skala mit sinnvollem Minimum und Maximum liegt und die Zonen genauso wichtig sind wie die Zahl. Ein Tachometer hat einen roten Bereich; ein Monatsziel hat „im Rückstand“, „knapp“ und „gut“. Brauchst du nur den Prozentwert einer Aufgabe, sagt ein Fortschrittsbalken oder -ring dasselbe mit weniger Platz. Hast du mehrere Ziele gleichzeitig, lassen sie sich mit Radial Bars besser vergleichen als mit einer Reihe von Gauges.

    Du willst zeigenNimmWarum
    Einen Wert mit Zonen und Zielwert (NPS, SLA, Verkaufsziel)GaugeZonenfarben, Zielmarkierung und Skalenenden in einem Instrument
    Mehrere Ziele, jedes mit eigenem ZielwertRadial BarKonzentrische Ringe vergleichen den Fortschritt, und ein Ring über 100% dreht eine zweite Runde
    Den Prozentwert einer Aufgabe (Upload, Onboarding)Progress als RingKleiner, kostenlos, wird als progressbar angesagt
    Eine Zahl und ihren TrendStat CardEin Gauge hat keine Zeitachse

    Das Meter-Pattern (opens in a new tab) von WAI-ARIA zieht dieselbe Grenze: Ein Meter ist ein Wert innerhalb eines bekannten Bereichs, etwa der Ladestand eines Akkus, und eignet sich weder für Fortschritt noch für Werte ohne sinnvolles Maximum. Das ist ein guter Test für jedes Gauge. Wenn du das Maximum nicht benennen kannst, nimm ein anderes Diagramm.

    Welche Pakete für React Gauge Charts gibt es?

    Drei Namen tauchen zuerst auf, wenn du nach einer React Gauge Chart Komponente oder einem React Speedometer Chart suchst, dazu MUI X, falls du MUI schon nutzt. Die Angaben stammen aus dem npm-Eintrag und der Doku des jeweiligen Projekts, Stand Oktober 2026.

    PaketAktuelle VersionLizenzHinweise aus der Doku
    react-gauge-chart (opens in a new tab)0.5.1, veröffentlicht im April 2024MITBasiert auf D3. nrOfLevels oder arcsLength für Zonen, percent von 0 bis 1 für die Nadel. Die Peer Dependencies reichen nur bis React 18. Die README nennt es einen Bug, dass das Diagramm bei Prop-Updates in anderer Größe neu rendert, und empfiehlt eine feste Höhe.
    react-gauge-component (opens in a new tab)2.0.29, veröffentlicht im April 2026MITEin Fork von react-gauge-chart mit einer Preset-Galerie und einem Sandbox-Editor. Die Peer Dependencies schließen React 19 ein. Die README zeigt für Next.js einen dynamischen Import mit ssr: false.
    react-d3-speedometer (opens in a new tab)3.1.2, veröffentlicht im Januar 2026MITEin Tachometer mit Nadel auf Basis von D3, mit React 19 als Peer Dependency.
    MUI X Charts Gauge (opens in a new tab)@mui/x-charts 9.15.0, veröffentlicht im Oktober 2026MITBogen-Gauge mit value, valueMin, valueMax, startAngle, endAngle. Folgt dem ARIA-Pattern für Meter. Es gibt kein Prop für eine Nadel: Die Doku zeichnet sie in GaugeContainer mit dem Hook useGaugeState().

    Nutzt du schon MUI, ist dessen Gauge die naheliegende Wahl: Es ist barrierefrei, und du holst dir keine neue Abhängigkeit ins Projekt. Willst du ein Nadel-Gauge mit Zonen aus einem einzigen npm install und stört dich ein reiner Client-Import nicht, nimm react-gauge-component statt react-gauge-chart: Es hat im April 2026 ein Release bekommen und führt React 19 als Peer Dependency. Das Gauge von Wingo UI ist Quellcode, den du in dein Projekt kopierst, mit Zonen, Zielwert und drei eingebauten Varianten.

    Welche Props braucht ein React Gauge Chart?

    Einen Wert, eine Skala und Zonen. value ist Pflicht, min und max stehen standardmäßig auf 0 und 100, und thresholds gibt an, wo jede Zone beginnt. Die Zonen werden automatisch sortiert, und jede reicht bis zum nächsten Schwellwert oder bis max.

    bash
    npx wingo-ui@latest add gauge
    tsx
    import { Gauge } from "@/components/ui/gauge";
    export function SalesGoal() {
    return (
    <Gauge
    value={67.6}
    valueFormat="percent"
    target={75}
    thresholds={[
    { value: 0, tone: "danger", label: "Im Rückstand" },
    { value: 50, tone: "warning", label: "Knapp" },
    { value: 75, tone: "success", label: "Gut" },
    ]}
    label="Monatliches Umsatzziel"
    description="$6,760 von $10,000"
    locale="en-US"
    />
    );
    }

    Der Bogen nimmt die Farbe der Zone an, in der der Wert liegt (colorByZone, standardmäßig an), ein schmales Band außen am Bogen zeigt alle Zonen (showBands), und ein Chip unter dem Wert nennt die aktuelle Zone. target zeichnet eine Markierung quer über die Spur, die in der Farbe des Untergrunds ausgeschnitten ist, damit sie auf jeder Zonenfarbe lesbar bleibt.

    Diese Props passt du als Nächstes meist an:

    • variant: arc füllt die Spur bis zum Wert, needle zeichnet eine schmale Spur in den Zonenfarben und eine Nadel (der typische Speedometer-Look), segments teilt die Spur in Zonen oder in segments gleich große Schritte.
    • sweep: 180 für einen Halbkreis, 240 (der Standard) oder 270 für einen offenen Ring.
    • size: sm, md oder lg, eine nominale Breite von 120, 200 oder 280px mit einer Wertgröße von 18, 28 oder 40px.
    • valueFormat: number, compact, currency oder percent, zusammen mit currency und locale. Für alles andere gibt es formatValue(value, { kind }): kind ist "value" für den Wert, "tick" für Minimum und Maximum oder "label" für den gesprochenen Text.

    Zieh den Regler unter dem Instrument. Der Bogen wechselt die Farbe, sobald der Wert 50% und 75% überschreitet, und die Dollar-Zeile unter dem Label zieht mit.

    Zieh den Regler: Der Bogen wird bei 50% bernsteinfarben und bei 75% grün, der Zonen-Chip wechselt, und die Zahl zählt zum neuen Wert
    $ npx wingo-ui@latest add gauge
    ProDoku: Gauge

    Wie bleibt ein Gauge bei kleinen Größen lesbar?

    Lass die Komponente Platz für den Text schaffen. Die meisten Gauge-Beispiele setzen Wert, Label und Beschreibung mit fester Schriftgröße in den Bogen. Das klappt bei 280px und geht bei 120px kaputt, wo ein Label wie „Durchschnittliche Antwortzeit“ breiter ist als die Öffnung.

    Das Gauge löst das in drei Schritten und misst dabei nie das DOM:

    1. Der Wert schrumpft, bis er passt. Die große Zahl wird kleiner, wenn ihr formatierter Text breiter ist als der Raum im Bogen, sodass „$128,450“ nie die Spur berührt.
    2. Das Label rückt unter das Instrument, wenn Label und Beschreibung in die Zeile mit Minimum und Maximum laufen würden. Zuerst probiert es eine schmalere Spalte zwischen den beiden Skalenenden und wandert erst nach außen, wenn der Text dort immer noch zu hoch ist. Der Wert bleibt im Bogen.
    3. Die Skalenenden werden kompakt. Mit valueFormat="currency" und einem Bereich ab 10.000 erscheint ein Maximum von 190000 als „$190K“ unter dem Bogenende.

    Weil das Layout aus geschätzten Textbreiten entsteht, steht im Server-HTML schon alles an seinem Platz, und bei der Hydration springt nichts. Das Instrument schrumpft auch mit einem schmaleren Container, aber das Root-Element hat min-w-[120px], sodass ein Raster mit zwei Gauge-Spalten auf ein 360px breites Smartphone passt, eine dritte Spalte aber nicht.

    Für Listenzeilen liest sich ein Halbkreis besser als ein Bogen mit 240 Grad, weil er niedriger ist. Blende die Skalenenden aus, setz den Labeltext neben das Instrument und gib min-w-0 plus eine Breite mit, wenn die Zeile das Instrument unter 120px braucht:

    tsx
    <Gauge value={42} max={60} size="sm" sweep={180} showMinMax={false} tone="info" locale="en-US" className="w-[96px] min-w-0" />

    Wie zeige ich einen Wert, bei dem weniger besser ist?

    Ordne die Zonen von gut nach schlecht. Antwortzeiten, Fehlerraten und Kosten sind besser, wenn sie niedrig sind, also bekommt die erste Zone den Ton success:

    tsx
    "use client";
    import { Gauge } from "@/components/ui/gauge";
    const hours = (v: number) => `${v.toLocaleString("en-US", { maximumFractionDigits: 1 })} h`;
    export function ReplyTime({ value }: { value: number }) {
    return (
    <Gauge
    value={value}
    max={8}
    variant="segments"
    target={4}
    thresholds={[
    { value: 0, tone: "success", label: "Schnell" },
    { value: 4, tone: "warning", label: "Langsam" },
    { value: 6, tone: "danger", label: "Kritisch" },
    ]}
    label="Durchschnittliche Antwortzeit"
    description="Ziel: unter 4 h"
    formatValue={(v) => hours(v)}
    />
    );
    }

    Die Zeile "use client" ist hier wichtig: formatValue ist eine Funktion, und eine Server Component kann einer Client Component keine Funktion übergeben. Die Variante segments zeigt jede Zone als eigenes Stück, die aktuelle voll deckend und die anderen mit 25% Deckkraft, dazu eine Ringmarkierung am Wert. Für einen Score mit negativem Bereich, etwa NPS von -100 bis 100, setz min={-100} und max={100}, und die Zonen funktionieren genauso. Werte außerhalb des Bereichs werden beim Zeichnen auf den Bereich begrenzt, während der Text weiter die echte Zahl zeigt, und value={null} zeichnet die Spur mit einem Strich für „noch keine Daten“.

    Die Nadel-Variante als Halbkreis: Zieh den Regler, und die Nadel dreht sich durch die Zonen, während der Wert mitzählt
    $ npx wingo-ui@latest add gauge
    ProDoku: Gauge

    Wie zeige ich mehrere Ziele als React Radial Progress Chart?

    Nimm die Radial Bar. Ein React Radial Progress Chart mit mehreren Ringen beantwortet eine andere Frage als ein Gauge: Wie weit ist jedes Ziel, nebeneinander betrachtet? Jeder Eintrag in data ist ein Ring mit eigenem max, der äußerste zuerst.

    bash
    npx wingo-ui@latest add radial-bar
    tsx
    "use client";
    import { useState } from "react";
    import { RadialBar, type RadialBarDatum } from "@/components/ui/radial-bar";
    const goals: RadialBarDatum[] = [
    { id: "calls", label: "Anrufe", value: 42, max: 60 },
    { id: "meetings", label: "Meetings", value: 7, max: 10 },
    { id: "quotes", label: "Gesendete Angebote", value: 18, max: 15 },
    ];
    export function TeamActivity() {
    const [selected, setSelected] = useState<string | null>(null);
    return (
    <RadialBar
    data={goals}
    value={selected}
    onValueChange={setSelected}
    label="Team-Aktivität heute"
    description="Gesendete Angebote haben ihr Ziel überschritten"
    center={<span className="text-xl font-semibold">3 Ziele</span>}
    locale="en-US"
    />
    );
    }

    Ein Ring, der sein Ziel überschreitet, dreht eine zweite Runde, so sind 18 von 15 Angeboten als übererfüllt erkennbar, ohne dass die Skala bricht. variant="bars" zeichnet statt voller Ringe Balken über 270 Grad, jeweils beschriftet direkt links vom Startpunkt bei 12 Uhr. Die Legende steht ab 480px Containerbreite neben dem Diagramm und rutscht in schmaleren Containern darunter.

    Kleine Größen löst sie wie das Gauge. size nimmt sm, md, lg oder eine beliebige Pixelzahl, sodass ein Ringset mit 52px in eine Listenzeile passt. Ist die Öffnung zu klein für die Anzeige, schwebt der Wert des Rings, über dem die Maus steht oder der den Fokus hat, stattdessen neben dessen Ende, und auf Touchscreens wird er über dem Diagramm fixiert (tooltipMode="auto").

    Fahr mit der Maus über einen Ring oder tipp ihn an: Die anderen werden blasser, und die Öffnung zeigt seinen Prozentwert. Spring per Tab zum Diagramm und geh mit den Pfeiltasten durch die Ringe
    $ npx wingo-ui@latest add radial-bar
    ProDoku: Radial bar

    Wie mache ich ein Gauge Chart barrierefrei?

    Gib ihm die Rolle meter, einen Namen und einen Satz, den ein Mensch versteht. Das Gauge rendert role="meter" mit aria-valuemin, aria-valuemax und aria-valuenow. Ein label als String benennt es; andere Label-Knoten werden über aria-labelledby verknüpft, description über aria-describedby. Der gesprochene Wert enthält Zone und Zielwert, mit den englischen Standardtexten und dem Zonen-Label „Close“ zum Beispiel „67.6%, Close zone, target 75%“. Diesen Satz ersetzt du mit labels.valueText(value, min, max, info), wobei info den formatierten Text, die Zone und den Zielwert enthält. Das Gauge ist rein lesend und bekommt nie den Fokus, weil es nichts zu bedienen gibt.

    Die Radial Bar ist interaktiv und funktioniert deshalb anders. Sie rendert pro Ring ein verstecktes Meter-Element, eine Tabelle für Screenreader mit Wert, Zielwert und Prozent sowie Tastatursteuerung: Mit Tab springst du zum Diagramm, die Pfeiltasten gehen durch die Ringe, Home und End springen zum äußersten bzw. innersten Ring, Enter oder Leertaste wählen aus, Escape hebt die Auswahl auf. Eine Live Region sagt jeden Ring an, während du dich durch die Ringe bewegst.

    Bei keinem der beiden Diagramme vermittelt die Farbe allein die Zone. Das Gauge schreibt den Zonennamen in den Chip und in den gesprochenen Text; die Radial Bar schreibt Werte und Prozente in die Legende. Bei reduzierter Bewegung überspringen beide die Animation und zeigen direkt den Endzustand.

    Was sind die typischen Fehler bei einem Gauge Chart?

    • Ein Gauge für eine Zahl ohne Maximum. Der Umsatz dieses Monats hat keine natürliche Obergrenze. Nimm ein Ziel als Maximum oder zeig eine Stat Card mit Trend.
    • Die Zielmarkierung auf einem anderen Hintergrund. Die Markierung ist in der Farbe des Untergrunds ausgeschnitten. Sitzt das Gauge auf einer Karte oder einer eigenen Füllung, übergib diese Farbe als surface.
    • Fehlende Zonen-Labels. Ohne label an jedem Schwellwert verschwindet der Chip, und der Screenreader sagt die Zahl und den Zielwert an, aber nicht die Zone.
    • Animation in Vorschaubildern und im Druck. Der Bogen baut sich animiert auf, sobald er zum ersten Mal in den sichtbaren Bereich scrollt. Übergib für statische Exporte animated={false}.
    • Eine Reihe Gauges für zusammengehörige Ziele. Fünf Instrumente nebeneinander lassen sich schwer vergleichen. Radial Bars oder ein Balkendiagramm stellen sie in einem einzigen Diagramm nebeneinander.

    Wie füge ich es meinem Projekt hinzu?

    Führ npx wingo-ui@latest add gauge oder npx wingo-ui@latest add radial-bar aus. Die CLI kopiert den Quellcode in dein Projekt, ergänzt das Chart-Kit sowie die Helfer für Motion und Zahlen, die die Komponenten importieren, und installiert motion und d3-shape. Beide sind Pro-Komponenten (Preise); der Ring von Progress ist kostenlos, wenn du nur einen Prozentwert brauchst. Für die Seite rund um ein Gauge baut das Next.js Admin Dashboard Tutorial die Shell, die KPI-Reihe und die Tabellen, und der Vergleich der Komponentenbibliotheken für Dashboards deckt die übrigen Diagramme ab. Weitere ausführliche Artikel zu einzelnen Komponenten findest du unter Komponenten-Guides, darunter den Guide zu React Sparklines für Trends in KPI-Kacheln.

    Komponenten in diesem Artikel

    • Gauge

      A React gauge chart showing one value against a scale and its zones: a speedometer arc, needle or segmented dial with a target tick.

      Pro
    • Radial bar

      A React radial bar chart: several goals as concentric activity rings or 270° bars, each filling toward its own target and lapping past 100%.

      Pro

    Häufige Fragen

    Wie baue ich ein Gauge Chart in React?

    Nimm eine Gauge-Komponente, die einen Wert, ein Minimum und ein Maximum bekommt, und ergänz Zonen und einen Zielwert. Mit Wingo UI ist das , installiert mit npx wingo-ui@latest add gauge.

    Was ist der Unterschied zwischen einem Gauge und einem Radial Bar Chart?

    Ein Gauge zeigt einen Wert auf einer Skala mit Zonen, wie ein Tachometer. Ein Radial Bar Chart zeigt mehrere Werte als konzentrische Ringe, die sich jeweils bis zu ihrem eigenen Zielwert füllen, wie die Aktivitätsringe einer Fitness-App.

    Welche ARIA-Rolle sollte ein Gauge haben?

    role="meter" mit aria-valuenow, aria-valuemin, aria-valuemax und einem Label, wie es das Meter-Pattern der WAI-ARIA Authoring Practices beschreibt. Nimm stattdessen progressbar, wenn der Wert den Fortschritt einer Aufgabe zeigt, etwa eines Uploads.

    Kann ich ein React Gauge Chart in Next.js mit Server-Rendering nutzen?

    Manche Pakete brauchen einen dynamischen Import mit ssr auf false; die README von react-gauge-component zeigt das für Next.js. Das Gauge von Wingo UI platziert seine Texte anhand geschätzter Breiten, statt das DOM zu messen, deshalb enthält schon das Server-HTML Instrument, Wert und Label an der richtigen Stelle.

    Sind Gauge und Radial Bar von Wingo UI kostenlos?

    Nein. Beide sind Pro-Komponenten. Die Komponente Progress, die eine Ring-Variante für einen einzelnen Prozentwert hat, gehört zum kostenlosen Tarif.

    • Charts
    • Gauge
    • Dashboard
    • Barrierefreiheit
    • React

    Teilen

    SR

    Über den Autor

    Serban Rusu

    Gründer von Wingo UI

    Serban Rusu hat Wingo UI gegründet. Er baut die Komponenten, die CLI und den MCP-Server und schreibt über React-UIs für Smartphones und KI-Agents.

    Mehr von Serban
    Weiterlesen

    Ähnliche Artikel

    Alle Artikel
    Komponenten-Guides

    Embla Carousel React: barrierefreie Slides ohne Layout Shift

    Bau mit Embla Carousel React ein Karussell für Fotos, Inserate, Testimonials und Onboarding, mit Tastatursteuerung, pausierbarem Autoplay und ohne Layout Shift.

    SRSerban Rusu·19. Okt. 2026·9 Min. Lesezeit
    Komponenten-Guides

    React Animated Counter mit rollenden Ziffern

    Bau einen React Animated Counter, der jede Ziffer wie ein Kilometerzähler rollt, Trennzeichen aus Intl holt, seine Breite hält und Reduced Motion beachtet.

    SRSerban Rusu·19. Okt. 2026·9 Min. Lesezeit
    Komponenten-Guides

    React Audio Player mit Waveform: Scrubbing und Peaks

    Bau einen React Audio Player mit Waveform für Podcasts, Sprachnachrichten und Anruflisten: Spulen per Tastatur, vorberechnete Peaks, keine Layout-Sprünge.

    SRSerban Rusu·19. Okt. 2026·9 Min. Lesezeit
    Newsletter

    Neue Artikel per E-Mail

    Neue Guides, Tutorials und Vergleiche aus dem Wingo UI Blog, sobald sie erscheinen. Die meisten Artikel sind auf Englisch.

    Kein Spam. Du kannst dich jederzeit abmelden.

    WingoUI

    Animierte, konfigurierbare, mobile-first React-Komponenten und Blöcke. Kopier den Quellcode, pass ihn an und lass deinen Coding-Agenten damit bauen.

    Produkt

    • Komponenten
    • Vorlagen
    • Preise
    • KI-Agenten
    • Theme-Generator

    Ressourcen

    • Doku
    • Blog
    • Changelog
    • Changelog-RSS
    • llms.txt

    Rechtliches

    • AGB
    • Datenschutz
    • Rückerstattung
    • Lizenz
    • Impressum

    Komponenten-Kategorien

    • Buttons & Actions
    • Inputs
    • Forms
    • Navigation
    • Overlays
    • Feedback
    • Data Display
    • Tables & Lists
    • Charts & Stats
    • Layout
    • Media
    • AI Kit
    • Text & Effects
    • Mobile
    • Commerce
    • Marketing Sections
    • Blocks
    • Hooks & Utilities

    © 2026 Wingo UI

    Wingo UI