hydroxy

Heatmap chart

A grid of values shaded from low to high. Use it for two categories against one measure, such as weekday against hour. The scale is one chart colour mixed into the surface, so it follows light and dark themes. Hover, touch or arrow-key to a cell to read it.

Sessions by weekday and hour

Darker cells are busier. Hover a cell, or focus the grid and use the arrow keys.

12243118922271415293621112633171427402513303519112333192429138162112610125
Sessions by weekday and hour of day
Row910111213141516
Mon122431189222714
Tue1529362111263317
Wed1427402513303519
Thu11233319–242913
Fri8162112610125

Server load through 2026

Requests per second, by hour of day. 8,760 cells drawn on a canvas.

Requests per second by hour and day (first 21 of 24 rows)
Row1 Jan2 Jan3 Jan4 Jan5 Jan6 Jan7 Jan8 Jan9 Jan10 Jan11 Jan12 Jan13 Jan14 Jan15 Jan16 Jan17 Jan18 Jan19 Jan20 Jan21 Jan22 Jan23 Jan24 Jan25 Jan26 Jan27 Jan28 Jan29 Jan30 Jan31 Jan1 Feb2 Feb3 Feb4 Feb5 Feb6 Feb7 Feb8 Feb9 Feb10 Feb11 Feb12 Feb13 Feb14 Feb15 Feb16 Feb17 Feb18 Feb19 Feb20 Feb21 Feb22 Feb23 Feb24 Feb25 Feb26 Feb27 Feb28 Feb1 Mar2 Mar3 Mar4 Mar5 Mar6 Mar7 Mar8 Mar9 Mar10 Mar11 Mar12 Mar13 Mar14 Mar15 Mar16 Mar17 Mar18 Mar19 Mar20 Mar21 Mar22 Mar23 Mar24 Mar25 Mar26 Mar27 Mar28 Mar29 Mar30 Mar31 Mar1 Apr2 Apr3 Apr4 Apr5 Apr6 Apr7 Apr8 Apr9 Apr10 Apr11 Apr12 Apr13 Apr14 Apr15 Apr16 Apr17 Apr18 Apr19 Apr20 Apr21 Apr22 Apr23 Apr24 Apr25 Apr26 Apr27 Apr28 Apr29 Apr30 Apr1 May2 May3 May4 May5 May6 May7 May8 May9 May10 May11 May12 May13 May14 May15 May16 May17 May18 May19 May20 May21 May22 May23 May24 May25 May26 May27 May28 May29 May30 May31 May1 Jun2 Jun3 Jun4 Jun5 Jun6 Jun7 Jun8 Jun9 Jun10 Jun11 Jun12 Jun13 Jun14 Jun15 Jun16 Jun17 Jun18 Jun19 Jun20 Jun21 Jun22 Jun23 Jun24 Jun25 Jun26 Jun27 Jun28 Jun29 Jun30 Jun1 Jul2 Jul3 Jul4 Jul5 Jul6 Jul7 Jul8 Jul9 Jul10 Jul11 Jul12 Jul13 Jul14 Jul15 Jul16 Jul17 Jul18 Jul19 Jul20 Jul21 Jul22 Jul23 Jul24 Jul25 Jul26 Jul27 Jul28 Jul29 Jul30 Jul31 Jul1 Aug2 Aug3 Aug4 Aug5 Aug6 Aug7 Aug8 Aug9 Aug10 Aug11 Aug12 Aug13 Aug14 Aug15 Aug16 Aug17 Aug18 Aug19 Aug20 Aug21 Aug22 Aug23 Aug24 Aug25 Aug26 Aug27 Aug28 Aug29 Aug30 Aug31 Aug1 Sep2 Sep3 Sep4 Sep5 Sep6 Sep7 Sep8 Sep9 Sep10 Sep11 Sep12 Sep13 Sep14 Sep15 Sep16 Sep17 Sep18 Sep19 Sep20 Sep21 Sep22 Sep23 Sep24 Sep25 Sep26 Sep27 Sep28 Sep29 Sep30 Sep1 Oct2 Oct3 Oct4 Oct5 Oct6 Oct7 Oct8 Oct9 Oct10 Oct11 Oct12 Oct13 Oct14 Oct15 Oct16 Oct17 Oct18 Oct19 Oct20 Oct21 Oct22 Oct23 Oct24 Oct25 Oct26 Oct27 Oct28 Oct29 Oct30 Oct31 Oct1 Nov2 Nov3 Nov4 Nov5 Nov6 Nov7 Nov8 Nov9 Nov10 Nov11 Nov12 Nov13 Nov14 Nov15 Nov16 Nov17 Nov18 Nov19 Nov20 Nov21 Nov22 Nov23 Nov24 Nov25 Nov26 Nov27 Nov28 Nov29 Nov30 Nov1 Dec2 Dec3 Dec4 Dec5 Dec6 Dec7 Dec8 Dec9 Dec10 Dec11 Dec12 Dec13 Dec14 Dec15 Dec16 Dec17 Dec18 Dec19 Dec20 Dec21 Dec22 Dec23 Dec24 Dec25 Dec26 Dec27 Dec28 Dec29 Dec30 Dec31 Dec
00:002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020
01:002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020
02:002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020
03:002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020
04:002020202020202020202020202020202020202020202020202020202021202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020212020202020202020202020202020202020202020202020202020202020202020202020202020202020202020
05:002121212121212121212121212121212120212121212221212121212121212121212121212121212121212121212121212121212121212121212120212121212121212121212121212120212121212121202121212121202121212121212020212121212120212121212121202021212121212020212121212121202121212121202021212021212020212121212120202021212121202021212121202020202121202120202021212121202021212121212020212121212120202121212121202021212120212020212121212120202121212121202021212121212020212121212121202121212120202021212121212020212121212120202121212121202021212121212020212121212121212121212121212021212121212020212121212120212121212121212121212121212121212121212120212121212121212121222121212121212121212121212121212121212121212121212121212121212121212121212121212121212121
06:002323222223232423222122232423232322222322232322222222232323232122232222232322222323232223212223232323232121232322232221212223222323212123232223222121232322222321212223222323222122222223232121222223232221212222222222212122232222222121222222222221212223212222212121222121222121222122222221212221222122212122222221212121222121222221212222222222212122212222222121212122222221212221222121212122222121222121212222222221212221222221212122222222222121222222222121212222212222212122222222222121212222222221212222222221212121222222222121222221222221212223222323212122222222222121232322222321212323232222212122232323232221222323222221212323222322212223232323232121222423232222222322232322212224232323232222232323232322222423232323212222222323
07:002727232326282827272424262926272824242527282528242427272824272223272627262624232725252527232426262727272424262727272523232726252625232326262726272324262626262624232627252526242324252526262323262625252623232625252524232224252425252323242425232423232525252424222324242524252223252323242422232424242424222223242424232222232423242422222423242424212224232224242222232423242322222424232424222223242324242322242324242322222424242224222224242425242222242524242522222423252323222324242424252222242525242622222526252424222225242425262322242525252623222525252526232325252526262423252626262623232524262626242426272727262423252626272623242629282625242527282426262424262628252825242626272826232328272828272325262828272624232426272627242427272727
08:003533272633363634322829373336343628273434323536272836313233332926352933343626273534353237282736333435332826323136333528283233313434252733293333292627333335313127282929323030272531313031302824293230303124262933303229252533323230322525303128303024252830312729252332292928292525292727312924252829282829242427282730292526282926292726232528282829242429272827292425282626272724232830292828252527272727282424282626272925252727282629252527282929282625282928263025242728273026252429302828272524272731303025263530302732262531303029282525312928293326272930323229272630323034292427333131303125263231292933272730333232322725303232313127283134303433272930343331312627343234343528293733333035282734353534312629313534323229303734353634262734343536
09:004042303442525245433634484942484429384943504143353245453947463435444747434234334439434945323639424643463332344248404532334055404242313140424543423434333941414133324637373943343243414034432931394041414030313842403240323037353737353031374037413628303641343436272635363539372826343734363930293535343531282832353631362926353433363627273732343235262734373334332828343434363329283134353538282633343536392627353537353328293638343635262938373337332827383234403428303638383338302936373735363026383638393830303638363938293139363440332732444140433834313739413838343040424541403132364239393830354142404043333444424344463334474743373733344041434051333248434143443435425253444231383949394441373639465049513136414943504535334851494743363443504542
10:005660413970686065574142566156746242485951586861404160696066684643646160536640375158616466434760455657563939575562626039375747495659374359645947614036565253535241405257465351394057485248514031505351484835394955525047413746405253463036544239455133384652535348373848494248513236503939483835354745424548313444504743412934444743434635314243414842343435404239373029434133454232344537474348303444444842473030494546424534274148464444333455484344462931444039494636354047464446333546464645553538494951504336355552505646373854495350523937515058544937344853595456433652505261574241534249556541425857556169374069515852594141605660575641455561455563464859656759574442546563635543476770555957434562646959634450615957566841437147726446444277566364
11:00869951529257998478545611272817199475582887010186555794707982785452848884967259488965927883574574678087816249828569798345558570898878455310079816575515371696974804546587672737240368065746661444274716572774441687368586140426963605672444764624565684540636046505544446467535665393854646050604042615258565940405962576160343346575464563635604759615542405060485561423646595553443336505953516043444752535544394054624949524039525959525138387257574863293963625462504642526457624544425452565363434358624755633740645977606947446469657353424064546972685049656372667445475492797166464666758068775647716867628045517154538083484878766471774857828471909657557863728495485990906589795462788476861005952866682818963487595917687545888701069569535374807992
12:0012210163569810510210311667521219213110712661649594108101104576711810210510911850611017885911126659981068312110660471199195739162608589107971075470791238310793596695771099295476297839610496546289799310784605476838292715361788990869358528676777587545478776872795551586862647547517870727168464773656878753953758079606553467075697771484568706364704544677074646949456974646666464264705966734547585775785540385868716666444664707263624450706261627143406461596267415172786663794953595569797453487267627771505273738474815048656970927951507985757583556164698984854950907894849349498084878780515473937881884665641056810374515585899585107657010064929312963607475938794596210492911101115961758996113945358102104959110654597512276109103726396121116799760681099410093986253108105100114102546912010794108
13:00145149647312285103120105696910497123130124646812313713114996826010912611510512188649810710211911481751251111201221056275118120109102131707613799991001275869107120105105119667110613712111910757741101021159899557311282817384706510986829485575899111878810069718272939295576094879788966164968378878551557672828095475282869371774964628668698150498476827682534771719558705444717067676540527371777263535170786964924248786974727348517680696667525180737573734549706283707746548369659174534869748480665147879076787745608184828694586083868372916655102909383746658678976788561559310111482755351789590848468719411210210010068657893969298536510690828599606311510411310610260591101081111321226658107931129496636610210895889975551021261131051148087100911181281208771116127114105119737714411811011712688771261221101129970681091281081271065882132110125105
14:0013910084761301301021161428167123155135135133748214213614512411486801181181291251497284821321201281395980771401291179366931371281351321177579112108961191386374124141129102115737911912012510310562571048911610912369541091179867996767103104928910764617910210611391715975941208894596011010110784996755110861008572565572858385805952113879394895251858381659152569281697788515364657871715853847776829050548378816378575382696870685054697284908151476479727085474770896786855851775466746447598573679086575790716368935555628785959856638586958590615989868467985259951059010192597010399938710661638510688848564589511510010797657198103901008666621031011239010872701158211810697795695879892106636078104901039365611011221091041086962114111109114936056115108111110115697810712112610213176811551531051281217172127119148109121818012112012512410272891141281271321227064130128118126
15:0010712778898110212212511273521221271251101046774139134113132110846878102110110144747710810313013510677771178299119120767114212111610910469621191201391101157368105114110110106666410886104121108657612211211011111561669710910492995660105108949410663588810782839859539674115909458648111485768451511029191857655618379768386545589689484865252758098777752529381736583515281858974744853826880847354506773767272585072598065804245728267628748467464818271494978645963794946758083719042537091738073455672857886715553787092636743549189909086585183767082786156939975888554629484879178685675988281775862677910082995861948492108946659958297106105738010210193901145867103107109117103646511610510712710651587110599128996869112101821181137578113110871201076773123118811231117464126130981061187175100951201241276978107114111931316976120901001311236877126130121129
16:001009467641271148793118626410699115951107562821128810511166571061181091191076675100119116114926974106118831059770639092811091004471100100104961105971891218499102596497848887101636173941091038151547810665687558589786799179614778957962905150787277958260516870789071555174817772585549886256768448587681637476464561655962724747718258687139518365696980465269627866684658647166578245496061627070443664555960564349716759586054497053716867404873717469674443757461767243526861725971483965678068714849607461698044475776596972515268757372715449715779748060598481657691505078100939493486410086929889546284818893107634787887399925055102968089100585510110192122836557928080861005360791009297106605589118959899637490112969476596811210296114108637110212082928769598710810286113747097109999399636710093100120
17:0085734459648873766765488384801017552526989658188585562957871946149102909276855245958173909549558982808263514581848170705947657576777156547789856982525269738172724440697683706642496084566967444452806968504250816657517348426170686961433763646455594044666267596739416458486768433964475262584041594661585940395862595266414055514555603739595652545539375056535361374041575156564633494948575241376153465860393857566262513437635863545443406560655967444058505956634135706557566047415168666165363754625666594642576669536946407165606059483866685764614054645865588346497886868263454783846869655052726373719654467169747884435477826677765343737867786852576877748984524696737086825749838910174774857728189778449568388717793524872838610575565982818679
18:005567474564685259624546546558725544496569576257423872595848524339696862626446405249586247423866575865524040505964514238426561515549424364625952523739526455625842456059555353443554566352514237514753526040344953455438383747465648523835604444504934334445484945383245524651413434394251464030364940464845333444434542443434444444444530294547434346373343403641403732444646444530374841454245353244414641483031384138444735324348394444353340474151443530424745485034344847434647373541464651513834575346454435364754474850343660495854583634534456575234385362555051413555566556514437534862575239395351596565425265576453553640675656675238396768604858434169546266583945676161605348445952586270363657626260544840806060676439475449537063404576585864
19:004843353245524447433335425043434436374647444544343844454651403636474542464733344745524645323541464637413435444052474031314445404250363242394947463332413843444530334241424245293238354145393233364043404230303741393834303336403634373128363436373829283736363932312937363437353027363639373729294037382935292833303436332630343232373328273232383134282837313636392926313235343427273531323233263036353532362927343636363429263737363636282929343234372832353641353728283836373836282836353336352830373738413529314336403335282837443537403132363742393731303940413543303145364440403430414040384532314349434541333043464740393133414547434730334437493939343044444645453432514541444329304054473949333950384752513737505152503636344248544645323949494839
20:003336272835353433312629333340342828283232353336282831333333343026353333333328273133363230272833293138322726303432333128263033333235272733293034332826303030333328243232303234282731343430332625313031302727253331283028252631303030292525293029273026253031312731252329283129292523292830303025252927292728242527282931282424302729292723242829283027232427282726302524262927283024242726292928242328242729292425282928282824252529292729242426282927302525282729292825242829282829252529302928292626292929293225263330302929252728293230342526312930313025243128333233262732313230292627303331302927243432323132272631333231352827333431323328273534343329292634353633322729383033353928283633323334292734343434313128353732353728283836333532292834343631

Usage

use hydroxy_leptos::chart_frame::ChartFrame;
use hydroxy_leptos::heatmap_chart::HeatmapChart;
use leptos::prelude::*;

pub fn demo() -> AnyView {
    let days: Vec<String> = ["Mon", "Tue", "Wed", "Thu", "Fri"].map(String::from).to_vec();
    let hours: Vec<String> = ["9", "10", "11", "12", "13", "14", "15", "16"].map(String::from).to_vec();
    // Sessions per weekday and hour. A NaN is a cell with no data.
    let sessions = vec![
        vec![12.0, 24.0, 31.0, 18.0, 9.0, 22.0, 27.0, 14.0],
        vec![15.0, 29.0, 36.0, 21.0, 11.0, 26.0, 33.0, 17.0],
        vec![14.0, 27.0, 40.0, 25.0, 13.0, 30.0, 35.0, 19.0],
        vec![11.0, 23.0, 33.0, 19.0, f64::NAN, 24.0, 29.0, 13.0],
        vec![8.0, 16.0, 21.0, 12.0, 6.0, 10.0, 12.0, 5.0],
    ];

    // A year of hourly load: 8,760 cells, so the grid draws on a canvas with sparse labels.
    let mut next = noise(11);
    let hours_of_day: Vec<String> = (0..24).map(|h| format!("{h:02}:00")).collect();
    let month_days = [
        ("Jan", 31),
        ("Feb", 28),
        ("Mar", 31),
        ("Apr", 30),
        ("May", 31),
        ("Jun", 30),
        ("Jul", 31),
        ("Aug", 31),
        ("Sep", 30),
        ("Oct", 31),
        ("Nov", 30),
        ("Dec", 31),
    ];
    let dates: Vec<String> = month_days.iter().flat_map(|&(m, n)| (1..=n).map(move |d| format!("{d} {m}"))).collect();
    let load: Vec<Vec<f64>> = (0..24)
        .map(|h| {
            let daily = (-(f64::from(h) - 14.0).powi(2) / 18.0).exp();
            (0..365)
                .map(|d| {
                    let season = 1.0 + 0.3 * (f64::from(d) / 365.0 * std::f64::consts::TAU).cos();
                    let weekend = if (d + 3) % 7 >= 5 { 0.55 } else { 1.0 };
                    (20.0 + 80.0 * daily * season * weekend * (1.0 + 0.15 * normal(&mut next))).round()
                })
                .collect()
        })
        .collect();

    view! {
        <div style="display: grid; gap: var(--space-10);">
        <ChartFrame title="Sessions by weekday and hour" description="Darker cells are busier. Hover a cell, or focus the grid and use the arrow keys.">
            <HeatmapChart
                values=sessions
                rows=days
                columns=hours
                label="Sessions by weekday and hour of day"
                show_values=true
            />
        </ChartFrame>
        <ChartFrame title="Server load through 2026" description="Requests per second, by hour of day. 8,760 cells drawn on a canvas." export=true>
            <HeatmapChart values=load rows=hours_of_day columns=dates label="Requests per second by hour and day" cell_height=10 />
        </ChartFrame>
        </div>
    }
    .into_any()
}

/// A small deterministic random source (xorshift), so server and browser draw the same data.
#[allow(clippy::cast_precision_loss, reason = "a 53-bit fraction is exact")]
fn noise(seed: u64) -> impl FnMut() -> f64 {
    let mut state = seed;
    move || {
        state ^= state << 13;
        state ^= state >> 7;
        state ^= state << 17;
        (state >> 11) as f64 / (1u64 << 53) as f64
    }
}

/// A standard normal sample from two uniform ones (Box-Muller).
fn normal(next: &mut impl FnMut() -> f64) -> f64 {
    (-2.0 * next().max(1e-12).ln()).sqrt() * (std::f64::consts::TAU * next()).cos()
}

Anatomy

Componentdata-partRenders
HeatmapChartrootfigure with a screen-reader table of every cell
cellsFocusable grid; arrow keys move between cells
cellShaded by --level; dashed when there is no data
canvasDraws the cells instead past 2,000 of them, with every twelfth-or-so label
highlightOutline on the active cell of a canvas grid
tooltipRow, column and value of the active cell
scaleLowest and highest value with a colour ramp between
sr-liveAnnounces the active cell
sr-tableEvery cell, one row per row label, for screen readers and CSV export

Keyboard

KeyDoes
ArrowLeft / ArrowRightMove along the row; the first press lands on the top-left cell
ArrowUp / ArrowDownMove between rows
Home / EndFirst or last cell in the row
EscapeClear the active cell

Props

PropTypeNotes
valuesVec<Vec<f64>>Required. One Vec per row. NaN or a short row leaves an empty cell
rowsVec<String>Required. One label per row
columnsVec<String>Required. One label per column
labelStringRequired. What the chart shows; the accessible name
cell_heightu16Cell height in px. Default 36
show_valuesboolPrint each value in its cell
formatFn(f64) -> StringFormats cells, tooltip, scale and table

Events

PropTypeNotes
on_hoverCallback<Option<Datum>>The mark under the pointer or keyboard focus changes, or is left. Fires only on a change
on_selectCallback<Datum>Click, tap or Enter on a mark
Actions
Button
Icon button
Toolbar
Theme menu
Display
Avatar
Badge
Card
Chip
Code block
Markdown
Doc card
Due pill
Kbd
Priority mark
Source chip
Space icon
Status diamond
Tag
Value diff
Carousel
Reveal
Media timeline
QR code
Transcript viewer
Audio waveform
Audio player
Forms
Calendar
Checkbox
Combobox
Date picker
Color picker
Cron builder
Theme editor
Mention input
Signature pad
Image cropper
Date field
Date range picker
Duration field
Quantity stepper
Filter chip
Input
Markdown editor
Radio group
Search field
Segmented control
Select
Slider
Range slider
Rating
Toggle button
File dropzone
Upload queue
Attachment
Switch
Tags input
Number field
Money field
Phone field
Time field
OTP input
Password field
Questionnaire
Availability picker
Voice input
Recording control
Inline edit
Async validated input
Shortcut recorder
Data
Spreadsheet grid
Week scheduler
Virtual list
Stat card
Step track
Kanban board
Sortable list
Filter builder
Data table
Grid
Access editor
File manager
Gantt chart
Log stream
Diff viewer
JSON inspector
Terminal
Node editor
Whiteboard
Navigation
Table of contents
Breadcrumb
Tabs
Wizard
Nav item
Nav section
Tree view
Pagination
Menubar
Navigation menu
Saved views
Layout
Master detail
App shell
Sidebar layout
Resizable panels
Dashboard layout
Dock layout
Feedback
Callout
Check list
Empty state
Progress bar
Toast
Approval card
Skeleton
Notification center
Bars
Bar chart
Diverging bar chart
Span chart
Pictogram chart
Stacked bar chart
Funnel chart
Bullet chart
Waffle chart
Marimekko chart
Dot plot chart
Error bar chart
Pareto chart
Waterfall chart
Lollipop chart
Grouped bar chart
Bar race chart
KPIs and frames
Chart frame
Metric card
Sparkline
Points
Scatter chart
Smith chart
Strip plot
Beeswarm chart
Parallel coordinates
Ternary chart
Bland-Altman chart
Quiver chart
Connected scatter chart
Grids and tables
Heatmap chart
Chart table
Cohort chart
Radial
Radial charts
Radar chart
Polar area chart
Stat ring
Clock chart
Spiral chart
Lines and areas
Bump chart
Slope chart
Line chart
Composed chart
Small multiples
Cycle plot chart
Horizon chart
Stacked area chart
Threshold chart
Split line chart
Linked charts
Confidence band chart
Forecast fan chart
Step chart
Range area chart
Distributions
Contour chart
Histogram
Box plot
Density chart
Ridgeline chart
Violin chart
Q-Q chart
Survival chart
ECDF chart
Raincloud plot
Forest plot
Maps
Geo map
Bubble map
Hexbin map
Cartogram
Flow map
Parts of a whole
Donut chart
Voronoi treemap
Nested donut chart
Treemap chart
Sunburst chart
Bubble pack chart
Icicle chart
Flame graph chart
Pie chart
Word cloud
Relationships
Sankey chart
Network chart
Chord chart
UpSet chart
Venn chart
Alluvial chart
Adjacency matrix chart
Dependency graph chart
Tree chart
Arc diagram
Hive plot
Edge bundling
Finance
Candlestick chart
OHLC chart
Depth chart
Renko chart
Time
Timeline chart
Calendar heatmap chart
Spectrogram chart
Marey chart
Overlays
Tour
Lightbox
Alert dialog
Command palette
Dialog
Menu
Popover
Tooltip
Sheet
Hover card
Context menu
Utilities
Pacer
Hotkeys
Disclosure
Accordion
Collapsible
Chat
Chat bubble
Voice session
Composer
Thread
Thread list
Assistant composer
Assistant MCP
Assistant modal
Assistant thread
Assistant thread list
Message scroller
Insight note
Emoji picker
Tool trace
Model picker
Citation popover
Activity
Activity feed
Comment thread
Timeline
Presence bar
Live cursors
Reaction bar
Guides
Getting started
All components
All charts