Hopp til hovedinnhold
Meny

lmfaole.party / designsystem / komponenter / Arealdiagram

  • Forside
  • Turer
  • Økonomi
  • Slides
  • <lm-chart-area> – Arealdiagram / Area chart

    Om komponenten

    Formål

    Flerserie-diagram som viser flere navngitte kategorier som fylte arealer under hver sin linje, over samme ordnede x-akse. Bygget for det chart-line eksplisitt ikke dekker: sammenligning av flere serier over tid/kategori i ett diagram, med innebygd fargeforklaring (legende) og en fullstendig, kolonnedelt datatabell for tilgjengelighet.

    Merk: Basislinjen (0) er alltid synlig i diagrammet, uavhengig av dataenes faktiske min/maks - i motsetning til chart-line, som skalerer til min-verdien. Dette er bevisst: et fylt areal som ikke starter fra en synlig null ville gitt et visuelt misvisende inntrykk av andelen som er fylt.

    Egner seg for

    • Sammenligning av 2-6 kategorier over samme ordnede akse, f.eks. aktiva vs. gjeld over tid, eller besøk per kanal over måneder.
    • Datasett der en samlet, tilgjengelig tabell med én kolonne per serie er den naturlige tilleggsvisningen.

    Egner seg ikke for

    • Én enkelt serie - bruk chart-line da, som har enklere API og samme visuelle språk for punkter.
    • Serier med ulike eller ikke-overlappende etiketter; komponenten forutsetter samme kategoriakse for alle serier og fyller manglende punkter med 0 fremfor å justere aksen.
    • Stablede (kumulative) arealer der seriene skal legges oppå hverandre - denne versjonen tegner arealene overlappende, ikke stablet.

    Bruk

    <script type="module" src="/designsystem/komponenter/data-visualisering/chart-area/chart-area.js"></script>
    
    <lm-chart-area tittel="Aktiva og gjeld over tid"></lm-chart-area>
    const diagram = document.querySelector("lm-chart-area");
    diagram.data = [
        {
            navn: "Aktiva",
            punkter: [
                {label: "Jan", value: 120000},
                {label: "Feb", value: 128000},
                {label: "Mar", value: 135000},
            ],
        },
        {
            navn: "Gjeld",
            farge: "var(--color-fare)",
            punkter: [
                {label: "Jan", value: 80000},
                {label: "Feb", value: 78000},
                {label: "Mar", value: 75000},
            ],
        },
    ];
    diagram.formatVerdi = (value) => `${value.toLocaleString("nb-NO")} kr`;

    Prøv selv

    Rediger koden under - resultatet oppdateres live.

    Attributter

    Attributt Type Standard Beskrivelse
    dataArray<{navn: string, farge?: string, punkter: Array<{label: string, value: number}>}>[]Property. Én oppføring per serie. Alle serier antas å dele samme etiketter i samme rekkefølge - kortere serier fylles med 0 for manglende punkter.
    tittelstring""Attributt/property. Tekst brukt som <caption> i den skjulte datatabellen.
    formatVerdi(value: number) => stringString(value)Property. Formatterer verdiene i linjenes <title>-tooltip og i datatabellen.

    Parts

    Part Beskrivelse
    diagramYtterrammen rundt diagram, legende og tabell.
    diagram-visualSVG-flaten.
    legendeListen med serienavn og fargeforklaring (vises kun ved 2+ serier).
    legende-svatchFargeprikken foran hvert serienavn i legenden.
    data-tabellSkjult datatabell for tilgjengelighet (én kolonne per serie).
    akseHorisontal nullinje/basislinje.
    flateDet fylte arealet under hver serie sin linje.
    linjeHver serie sin kurve.
    etikettHver kategorietikett langs x-aksen.

    Styling med ::part()

    Hver part over kan restyles direkte fra et vanlig, ytre stilark - uten å måtte endre selve komponenten eller duplisere den:

    lm-chart-area::part(diagram) {
        /* egne stiler for "Ytterrammen rundt diagram, legende og tabell." */
    }
    
    lm-chart-area::part(diagram-visual) {
        /* egne stiler for "SVG-flaten." */
    }
    
    lm-chart-area::part(legende) {
        /* egne stiler for "Listen med serienavn og fargeforklaring (vises kun ved 2+ serier)." */
    }
    
    lm-chart-area::part(legende-svatch) {
        /* egne stiler for "Fargeprikken foran hvert serienavn i legenden." */
    }
    
    lm-chart-area::part(data-tabell) {
        /* egne stiler for "Skjult datatabell for tilgjengelighet (én kolonne per serie)." */
    }
    
    lm-chart-area::part(akse) {
        /* egne stiler for "Horisontal nullinje/basislinje." */
    }
    
    lm-chart-area::part(flate) {
        /* egne stiler for "Det fylte arealet under hver serie sin linje." */
    }
    
    lm-chart-area::part(linje) {
        /* egne stiler for "Hver serie sin kurve." */
    }
    
    lm-chart-area::part(etikett) {
        /* egne stiler for "Hver kategorietikett langs x-aksen." */
    }

    Tilgjengelighet

    SVG-en skjules med aria-hidden="true" og role="presentation"; skjermlesere får den skjulte <table>-en med én kolonne per serie og <caption> fra tittel. Legenden er vanlig, synlig tekst (ikke skjult) og trenger derfor ingen egen ARIA - fargeprikkene er rent dekorative siden serienavnet alltid står ved siden av. Komponenten er ren presentasjon uten tastaturstøtte. prefers-reduced-motion: reduce slår av animasjoner, og forced-colors: active bruker systemfarger og tvinger arealene til Canvas-bakgrunn med synlig kontur.

    • SVG-en skjules med aria-hidden="true" og role="presentation"; skjermlesere får den skjulte <table>-en.
    • Tabellen har én kolonne per serie, <caption> fra tittel, <th scope="row"> per etikett og <th scope="col"> per serienavn.
    • Legenden er alltid synlig tekst - ingen skjult duplikat trengs.
    • Komponenten er ren presentasjon uten tastaturstøtte.
    • prefers-reduced-motion: reduce slår av animasjoner, og forced-colors: active bruker systemfarger.

    Referanser

    Se også:

    Avhengigheter: designsystem/funksjoner/sikkerhet/escape-html/, designsystem/funksjoner/statistikk/finn-ytterpunkter/, designsystem/funksjoner/statistikk/finn-skalatrinn/