Skip to content
daisyBlazor

HeatmapChart

A grid of rows and columns where each cell is shaded by its value: requests by weekday and hour, response time by region and endpoint. D3 lays out the grid and the sequential scale from the smallest to the largest value; the shades are mixed from a theme colour.
Over time
Cover · <HeatmapChart>
Heatmap7 rows by 12 columns, values from 4 to 38. Highest: Mon, 08 (38), Tue, 18 (38), Wed, 14 (38).000204060810121416182022MonTueWedThuFriSatSunMon, 00: 12Mon, 02: 17Mon, 04: 15Mon, 06: 13Mon, 08: 38Mon, 10: 36Mon, 12: 34Mon, 14: 32Mon, 16: 37Mon, 18: 35Mon, 20: 13Mon, 22: 18Tue, 00: 15Tue, 02: 13Tue, 04: 18Tue, 06: 16Tue, 08: 34Tue, 10: 32Tue, 12: 37Tue, 14: 35Tue, 16: 33Tue, 18: 38Tue, 20: 16Tue, 22: 14Wed, 00: 18Wed, 02: 16Wed, 04: 14Wed, 06: 12Wed, 08: 37Wed, 10: 35Wed, 12: 33Wed, 14: 38Wed, 16: 36Wed, 18: 34Wed, 20: 12Wed, 22: 17Thu, 00: 14Thu, 02: 12Thu, 04: 17Thu, 06: 15Thu, 08: 33Thu, 10: 38Thu, 12: 36Thu, 14: 34Thu, 16: 32Thu, 18: 37Thu, 20: 15Thu, 22: 13Fri, 00: 17Fri, 02: 15Fri, 04: 13Fri, 06: 18Fri, 08: 36Fri, 10: 34Fri, 12: 32Fri, 14: 37Fri, 16: 35Fri, 18: 33Fri, 20: 18Fri, 22: 16Sat, 00: 5Sat, 02: 10Sat, 04: 8Sat, 06: 6Sat, 08: 24Sat, 10: 29Sat, 12: 27Sat, 14: 25Sat, 16: 30Sat, 18: 28Sat, 20: 6Sat, 22: 4Sun, 00: 8Sun, 02: 6Sun, 04: 4Sun, 06: 9Sun, 08: 27Sun, 10: 25Sun, 12: 30Sun, 14: 28Sun, 16: 26Sun, 18: 24Sun, 20: 9Sun, 22: 7

Examples

Basic

Each HeatmapCell puts a Value at a Row and Column; rows and columns follow the order the data first names them, and crowded column labels are thinned.

API requests by weekday and hour (thousands)
API requests by weekday and hour (thousands)7 rows by 24 columns, values from 1k requests to 45k requests. Highest: Mon, 11 (45k requests), Mon, 17 (45k requests), Tue, 08 (45k requests).000102030405060708091011121314151617181920212223MonTueWedThuFriSatSunMon, 00: 4k requestsMon, 01: 5k requestsMon, 02: 6k requestsMon, 03: 7k requestsMon, 04: 8k requestsMon, 05: 9k requestsMon, 06: 14k requestsMon, 07: 15k requestsMon, 08: 42k requestsMon, 09: 43k requestsMon, 10: 44k requestsMon, 11: 45k requestsMon, 12: 28k requestsMon, 13: 41k requestsMon, 14: 42k requestsMon, 15: 43k requestsMon, 16: 44k requestsMon, 17: 45k requestsMon, 18: 40k requestsMon, 19: 15k requestsMon, 20: 16k requestsMon, 21: 17k requestsMon, 22: 8k requestsMon, 23: 9k requestsTue, 00: 7k requestsTue, 01: 8k requestsTue, 02: 9k requestsTue, 03: 4k requestsTue, 04: 5k requestsTue, 05: 6k requestsTue, 06: 17k requestsTue, 07: 18k requestsTue, 08: 45k requestsTue, 09: 40k requestsTue, 10: 41k requestsTue, 11: 42k requestsTue, 12: 31k requestsTue, 13: 44k requestsTue, 14: 45k requestsTue, 15: 40k requestsTue, 16: 41k requestsTue, 17: 42k requestsTue, 18: 43k requestsTue, 19: 18k requestsTue, 20: 19k requestsTue, 21: 14k requestsTue, 22: 5k requestsTue, 23: 6k requestsWed, 00: 4k requestsWed, 01: 5k requestsWed, 02: 6k requestsWed, 03: 7k requestsWed, 04: 8k requestsWed, 05: 9k requestsWed, 06: 14k requestsWed, 07: 15k requestsWed, 08: 42k requestsWed, 09: 43k requestsWed, 10: 44k requestsWed, 11: 45k requestsWed, 12: 28k requestsWed, 13: 41k requestsWed, 14: 42k requestsWed, 15: 43k requestsWed, 16: 44k requestsWed, 17: 45k requestsWed, 18: 40k requestsWed, 19: 15k requestsWed, 20: 16k requestsWed, 21: 17k requestsWed, 22: 8k requestsWed, 23: 9k requestsThu, 00: 7k requestsThu, 01: 8k requestsThu, 02: 9k requestsThu, 03: 4k requestsThu, 04: 5k requestsThu, 05: 6k requestsThu, 06: 17k requestsThu, 07: 18k requestsThu, 08: 45k requestsThu, 09: 40k requestsThu, 10: 41k requestsThu, 11: 42k requestsThu, 12: 31k requestsThu, 13: 44k requestsThu, 14: 45k requestsThu, 15: 40k requestsThu, 16: 41k requestsThu, 17: 42k requestsThu, 18: 43k requestsThu, 19: 18k requestsThu, 20: 19k requestsThu, 21: 14k requestsThu, 22: 5k requestsThu, 23: 6k requestsFri, 00: 4k requestsFri, 01: 5k requestsFri, 02: 6k requestsFri, 03: 7k requestsFri, 04: 8k requestsFri, 05: 9k requestsFri, 06: 14k requestsFri, 07: 15k requestsFri, 08: 42k requestsFri, 09: 43k requestsFri, 10: 44k requestsFri, 11: 45k requestsFri, 12: 28k requestsFri, 13: 41k requestsFri, 14: 42k requestsFri, 15: 43k requestsFri, 16: 44k requestsFri, 17: 45k requestsFri, 18: 40k requestsFri, 19: 15k requestsFri, 20: 16k requestsFri, 21: 17k requestsFri, 22: 8k requestsFri, 23: 9k requestsSat, 00: 4k requestsSat, 01: 5k requestsSat, 02: 6k requestsSat, 03: 1k requestsSat, 04: 2k requestsSat, 05: 3k requestsSat, 06: 8k requestsSat, 07: 9k requestsSat, 08: 19k requestsSat, 09: 14k requestsSat, 10: 15k requestsSat, 11: 16k requestsSat, 12: 13k requestsSat, 13: 18k requestsSat, 14: 19k requestsSat, 15: 14k requestsSat, 16: 15k requestsSat, 17: 16k requestsSat, 18: 17k requestsSat, 19: 9k requestsSat, 20: 10k requestsSat, 21: 5k requestsSat, 22: 2k requestsSat, 23: 3k requestsSun, 00: 1k requestsSun, 01: 2k requestsSun, 02: 3k requestsSun, 03: 4k requestsSun, 04: 5k requestsSun, 05: 6k requestsSun, 06: 5k requestsSun, 07: 6k requestsSun, 08: 16k requestsSun, 09: 17k requestsSun, 10: 18k requestsSun, 11: 19k requestsSun, 12: 10k requestsSun, 13: 15k requestsSun, 14: 16k requestsSun, 15: 17k requestsSun, 16: 18k requestsSun, 17: 19k requestsSun, 18: 14k requestsSun, 19: 6k requestsSun, 20: 7k requestsSun, 21: 8k requestsSun, 22: 5k requestsSun, 23: 6k requests
website/Examples/Charts/HeatmapChartBasicExample.razor Source

ShowValues writes each value in its cell, Rows and Columns fix the order, and Color picks the theme colour of the largest value.

p95 response time by region and endpoint
p95 response time by region and endpoint4 rows by 5 columns, values from 76 ms to 690 ms. Highest: ap-south, /upload (690 ms), us-west, /upload (560 ms), eu-west, /upload (520 ms)./auth/search/reports/upload/webhookseu-westus-eastus-westap-southeu-west, /auth: 82 ms82 mseu-west, /search: 140 ms140 mseu-west, /reports: 310 ms310 mseu-west, /upload: 520 ms520 mseu-west, /webhooks: 95 ms95 msus-east, /auth: 76 ms76 msus-east, /search: 128 ms128 msus-east, /reports: 290 ms290 msus-east, /upload: 480 ms480 msus-east, /webhooks: 88 ms88 msus-west, /auth: 91 ms91 msus-west, /search: 152 ms152 msus-west, /reports: 335 ms335 msus-west, /upload: 560 ms560 msus-west, /webhooks: 102 ms102 msap-south, /auth: 118 ms118 msap-south, /search: 205 ms205 msap-south, /reports: 410 ms410 msap-south, /upload: 690 ms690 msap-south, /webhooks: 131 ms131 ms
website/Examples/Charts/HeatmapChartValuesExample.razor Source

Discrete levels

Levels splits the values into that many equal ranges, one shade each, and the legend shows a swatch per range instead of a gradient.

Build failures by team and weekday
Build failures by team and weekday5 rows by 5 columns, values from 0 to 12. Highest: Billing, Thu (12), Data, Fri (12), Mobile, Wed (11).MonTueWedThuFriPlatformBillingSearchMobileDataPlatform, Mon: 00Platform, Tue: 55Platform, Wed: 1010Platform, Thu: 22Platform, Fri: 77Billing, Mon: 77Billing, Tue: 00Billing, Wed: 66Billing, Thu: 1212Billing, Fri: 55Search, Mon: 11Search, Tue: 88Search, Wed: 22Search, Thu: 99Search, Fri: 33Mobile, Mon: 88Mobile, Tue: 33Mobile, Wed: 1111Mobile, Thu: 66Mobile, Fri: 11Data, Mon: 22Data, Tue: 1111Data, Wed: 77Data, Thu: 33Data, Fri: 1212
0 – 3 3 – 6 6 – 9 9 – 12
website/Examples/Charts/HeatmapChartLevelsExample.razor Source

Playground

API requests by weekday and hour (thousands)
API requests by weekday and hour (thousands)7 rows by 24 columns, values from 1k requests to 45k requests. Highest: Mon, 11 (45k requests), Mon, 17 (45k requests), Tue, 08 (45k requests).000102030405060708091011121314151617181920212223MonTueWedThuFriSatSunMon, 00: 4k requestsMon, 01: 5k requestsMon, 02: 6k requestsMon, 03: 7k requestsMon, 04: 8k requestsMon, 05: 9k requestsMon, 06: 14k requestsMon, 07: 15k requestsMon, 08: 42k requestsMon, 09: 43k requestsMon, 10: 44k requestsMon, 11: 45k requestsMon, 12: 28k requestsMon, 13: 41k requestsMon, 14: 42k requestsMon, 15: 43k requestsMon, 16: 44k requestsMon, 17: 45k requestsMon, 18: 40k requestsMon, 19: 15k requestsMon, 20: 16k requestsMon, 21: 17k requestsMon, 22: 8k requestsMon, 23: 9k requestsTue, 00: 7k requestsTue, 01: 8k requestsTue, 02: 9k requestsTue, 03: 4k requestsTue, 04: 5k requestsTue, 05: 6k requestsTue, 06: 17k requestsTue, 07: 18k requestsTue, 08: 45k requestsTue, 09: 40k requestsTue, 10: 41k requestsTue, 11: 42k requestsTue, 12: 31k requestsTue, 13: 44k requestsTue, 14: 45k requestsTue, 15: 40k requestsTue, 16: 41k requestsTue, 17: 42k requestsTue, 18: 43k requestsTue, 19: 18k requestsTue, 20: 19k requestsTue, 21: 14k requestsTue, 22: 5k requestsTue, 23: 6k requestsWed, 00: 4k requestsWed, 01: 5k requestsWed, 02: 6k requestsWed, 03: 7k requestsWed, 04: 8k requestsWed, 05: 9k requestsWed, 06: 14k requestsWed, 07: 15k requestsWed, 08: 42k requestsWed, 09: 43k requestsWed, 10: 44k requestsWed, 11: 45k requestsWed, 12: 28k requestsWed, 13: 41k requestsWed, 14: 42k requestsWed, 15: 43k requestsWed, 16: 44k requestsWed, 17: 45k requestsWed, 18: 40k requestsWed, 19: 15k requestsWed, 20: 16k requestsWed, 21: 17k requestsWed, 22: 8k requestsWed, 23: 9k requestsThu, 00: 7k requestsThu, 01: 8k requestsThu, 02: 9k requestsThu, 03: 4k requestsThu, 04: 5k requestsThu, 05: 6k requestsThu, 06: 17k requestsThu, 07: 18k requestsThu, 08: 45k requestsThu, 09: 40k requestsThu, 10: 41k requestsThu, 11: 42k requestsThu, 12: 31k requestsThu, 13: 44k requestsThu, 14: 45k requestsThu, 15: 40k requestsThu, 16: 41k requestsThu, 17: 42k requestsThu, 18: 43k requestsThu, 19: 18k requestsThu, 20: 19k requestsThu, 21: 14k requestsThu, 22: 5k requestsThu, 23: 6k requestsFri, 00: 4k requestsFri, 01: 5k requestsFri, 02: 6k requestsFri, 03: 7k requestsFri, 04: 8k requestsFri, 05: 9k requestsFri, 06: 14k requestsFri, 07: 15k requestsFri, 08: 42k requestsFri, 09: 43k requestsFri, 10: 44k requestsFri, 11: 45k requestsFri, 12: 28k requestsFri, 13: 41k requestsFri, 14: 42k requestsFri, 15: 43k requestsFri, 16: 44k requestsFri, 17: 45k requestsFri, 18: 40k requestsFri, 19: 15k requestsFri, 20: 16k requestsFri, 21: 17k requestsFri, 22: 8k requestsFri, 23: 9k requestsSat, 00: 4k requestsSat, 01: 5k requestsSat, 02: 6k requestsSat, 03: 1k requestsSat, 04: 2k requestsSat, 05: 3k requestsSat, 06: 8k requestsSat, 07: 9k requestsSat, 08: 19k requestsSat, 09: 14k requestsSat, 10: 15k requestsSat, 11: 16k requestsSat, 12: 13k requestsSat, 13: 18k requestsSat, 14: 19k requestsSat, 15: 14k requestsSat, 16: 15k requestsSat, 17: 16k requestsSat, 18: 17k requestsSat, 19: 9k requestsSat, 20: 10k requestsSat, 21: 5k requestsSat, 22: 2k requestsSat, 23: 3k requestsSun, 00: 1k requestsSun, 01: 2k requestsSun, 02: 3k requestsSun, 03: 4k requestsSun, 04: 5k requestsSun, 05: 6k requestsSun, 06: 5k requestsSun, 07: 6k requestsSun, 08: 16k requestsSun, 09: 17k requestsSun, 10: 18k requestsSun, 11: 19k requestsSun, 12: 10k requestsSun, 13: 15k requestsSun, 14: 16k requestsSun, 15: 17k requestsSun, 16: 18k requestsSun, 17: 19k requestsSun, 18: 14k requestsSun, 19: 6k requestsSun, 20: 7k requestsSun, 21: 8k requestsSun, 22: 5k requestsSun, 23: 6k requests
<HeatmapChart
              ValueFormat="{0:N0}k requests"
              Title="API requests by weekday and hour (thousands)"
              Cells="@_cells" />

@code {
    private static readonly string[] _days = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];

    // Traffic follows the working day, with a lunch dip and quiet weekends.
    private static readonly HeatmapCell[] _cells = _days
        .SelectMany((day, d) => Enumerable.Range(0, 24).Select(hour =>
        {
            double working = hour is >= 8 and <= 18 ? (hour == 12 ? 28 : 40) : hour is >= 6 and <= 21 ? 14 : 4;
            double load = (d >= 5 ? working * 0.35 : working) + (hour * 7 + d * 3) % 6;
            return new HeatmapCell(day, hour.ToString("00"), Math.Round(load));
        }))
        .ToArray();
}

API

<HeatmapChart>

DaisyBlazor.Charts

Parameters

  • AspectRatio double
    = 1.78

    Width divided by height. The chart keeps this shape at any width; its text keeps its size.

  • Cells IReadOnlyList<HeatmapCell>
    = []

    The values. Each HeatmapCell puts a Value at a Row and Column; a repeated pair is summed.

  • Color string
    = null

    CSS colour of the largest value; smaller values blend it into the page background. Defaults to the theme's primary colour.

  • Columns IReadOnlyList<string>
    = null

    Column order, left to right. Defaults to the column names in order of first appearance; columns not listed are left out.

  • Levels int?
    = null

    Number of discrete colour steps (2 to 10). When set, the values are split into that many equal ranges between Min and Max, each drawn in one shade, and the legend shows one swatch per range. When null (the default) the shading is continuous.

  • Max double?
    = null

    Value drawn as the full colour; larger values are clamped to it. Defaults to the largest value.

  • Min double?
    = null

    Value drawn as the faintest shade; smaller values are clamped to it. Defaults to 0, or to the smallest value when one is negative.

  • RowHeight double?
    = null

    Height of each row in px, for a chart that lays its categories out as rows (horizontal bars, a Gantt's lanes, a heatmap's rows…): its height then follows its number of rows instead of AspectRatio, so a long list keeps readable rows at any width. A chart, or an orientation, without rows ignores it.

  • Rows IReadOnlyList<string>
    = null

    Row order, top to bottom. Defaults to the row names in order of first appearance; rows not listed are left out.

  • ShowLegend bool
    = true

    Show the colour scale, from Min to Max, under the chart.

  • ShowTitle bool
    = true

    Draw Title as a visible heading above the chart (the default); false keeps it only as the chart's accessible name, for a chart inside a card that already has a heading.

  • ShowValues bool
    = false

    Write each value inside its cell, where it fits.

  • Title string
    = null

    Optional heading rendered above the chart; it is also the chart's accessible name.

  • ValueFormat string
    = "{0:#,0.##}"

    Format string for values in cells, tooltips and the legend, e.g. "{0:N0} requests". With the default and Levels, the legend shows as many decimals as the step size needs.

  • Width string
    = "100%"

    CSS width of the chart wrapper.

  • Class string
    = null

    Additional CSS classes merged onto the w-full wrapper.

  • Style string
    = null

    Inline styles appended after the width on the wrapper.

Something went wrong while running the docs. Reload