Calendar Heatmap Chart
Display data density across a calendar year, similar to GitHub contribution graphs. Each cell represents a day, with color intensity showing the value.
Installation
dotnet add package Lumeo.Charts
One-time app setup (AddLumeo(), CSS & JS) is covered in the
installation guide.
Usage
@using Lumeo <CalendarHeatmapChart />
| Name | Value |
|---|---|
| 1 | 2025-09-01, 1 |
| 2 | 2025-02-15, 5 |
| 3 | 2025-03-03, 2 |
| 4 | 2025-09-22, 5 |
| 5 | 2025-03-05, 8 |
| 6 | 2025-03-27, 2 |
| 7 | 2025-07-04, 3 |
| 8 | 2025-05-20, 2 |
| 9 | 2025-07-08, 0 |
| 10 | 2025-10-25, 6 |
| 11 | 2025-05-26, 1 |
| 12 | 2025-02-02, 7 |
| 13 | 2025-10-25, 5 |
| 14 | 2025-01-17, 7 |
| 15 | 2025-02-23, 9 |
| 16 | 2025-09-10, 5 |
| 17 | 2025-03-10, 0 |
| 18 | 2025-04-23, 6 |
| 19 | 2025-10-27, 0 |
| 20 | 2025-07-15, 8 |
| 21 | 2025-10-01, 4 |
| 22 | 2025-02-24, 0 |
| 23 | 2025-01-19, 8 |
| 24 | 2025-08-17, 1 |
| 25 | 2025-04-02, 8 |
| 26 | 2025-04-16, 7 |
| 27 | 2025-02-22, 0 |
| 28 | 2025-08-09, 5 |
| 29 | 2025-01-19, 4 |
| 30 | 2025-09-15, 6 |
| 31 | 2025-03-21, 0 |
| 32 | 2025-05-14, 2 |
| 33 | 2025-01-26, 7 |
| 34 | 2025-01-26, 5 |
| 35 | 2025-01-05, 8 |
| 36 | 2025-06-10, 5 |
| 37 | 2025-07-02, 0 |
| 38 | 2025-10-30, 0 |
| 39 | 2025-01-02, 0 |
| 40 | 2025-08-27, 0 |
| 41 | 2025-11-30, 10 |
| 42 | 2025-06-18, 4 |
| 43 | 2025-08-14, 0 |
| 44 | 2025-05-17, 1 |
| 45 | 2025-06-09, 8 |
| 46 | 2025-07-14, 4 |
| 47 | 2025-04-19, 9 |
| 48 | 2025-08-03, 8 |
| 49 | 2025-01-08, 9 |
| 50 | 2025-12-16, 3 |
| … and 70 more data points | |
| Name | Value |
|---|---|
| 1 | 2025-09-01, 1 |
| 2 | 2025-02-15, 5 |
| 3 | 2025-03-03, 2 |
| 4 | 2025-09-22, 5 |
| 5 | 2025-03-05, 8 |
| 6 | 2025-03-27, 2 |
| 7 | 2025-07-04, 3 |
| 8 | 2025-05-20, 2 |
| 9 | 2025-07-08, 0 |
| 10 | 2025-10-25, 6 |
| 11 | 2025-05-26, 1 |
| 12 | 2025-02-02, 7 |
| 13 | 2025-10-25, 5 |
| 14 | 2025-01-17, 7 |
| 15 | 2025-02-23, 9 |
| 16 | 2025-09-10, 5 |
| 17 | 2025-03-10, 0 |
| 18 | 2025-04-23, 6 |
| 19 | 2025-10-27, 0 |
| 20 | 2025-07-15, 8 |
| 21 | 2025-10-01, 4 |
| 22 | 2025-02-24, 0 |
| 23 | 2025-01-19, 8 |
| 24 | 2025-08-17, 1 |
| 25 | 2025-04-02, 8 |
| 26 | 2025-04-16, 7 |
| 27 | 2025-02-22, 0 |
| 28 | 2025-08-09, 5 |
| 29 | 2025-01-19, 4 |
| 30 | 2025-09-15, 6 |
| 31 | 2025-03-21, 0 |
| 32 | 2025-05-14, 2 |
| 33 | 2025-01-26, 7 |
| 34 | 2025-01-26, 5 |
| 35 | 2025-01-05, 8 |
| 36 | 2025-06-10, 5 |
| 37 | 2025-07-02, 0 |
| 38 | 2025-10-30, 0 |
| 39 | 2025-01-02, 0 |
| 40 | 2025-08-27, 0 |
| 41 | 2025-11-30, 10 |
| 42 | 2025-06-18, 4 |
| 43 | 2025-08-14, 0 |
| 44 | 2025-05-17, 1 |
| 45 | 2025-06-09, 8 |
| 46 | 2025-07-14, 4 |
| 47 | 2025-04-19, 9 |
| 48 | 2025-08-03, 8 |
| 49 | 2025-01-08, 9 |
| 50 | 2025-12-16, 3 |
| … and 70 more data points | |
The same year with a custom Colors gradient driving the visual map and the ECharts Toolbox enabled.
| Name | Value |
|---|---|
| 1 | 2025-09-01, 1 |
| 2 | 2025-02-15, 5 |
| 3 | 2025-03-03, 2 |
| 4 | 2025-09-22, 5 |
| 5 | 2025-03-05, 8 |
| 6 | 2025-03-27, 2 |
| 7 | 2025-07-04, 3 |
| 8 | 2025-05-20, 2 |
| 9 | 2025-07-08, 0 |
| 10 | 2025-10-25, 6 |
| 11 | 2025-05-26, 1 |
| 12 | 2025-02-02, 7 |
| 13 | 2025-10-25, 5 |
| 14 | 2025-01-17, 7 |
| 15 | 2025-02-23, 9 |
| 16 | 2025-09-10, 5 |
| 17 | 2025-03-10, 0 |
| 18 | 2025-04-23, 6 |
| 19 | 2025-10-27, 0 |
| 20 | 2025-07-15, 8 |
| 21 | 2025-10-01, 4 |
| 22 | 2025-02-24, 0 |
| 23 | 2025-01-19, 8 |
| 24 | 2025-08-17, 1 |
| 25 | 2025-04-02, 8 |
| 26 | 2025-04-16, 7 |
| 27 | 2025-02-22, 0 |
| 28 | 2025-08-09, 5 |
| 29 | 2025-01-19, 4 |
| 30 | 2025-09-15, 6 |
| 31 | 2025-03-21, 0 |
| 32 | 2025-05-14, 2 |
| 33 | 2025-01-26, 7 |
| 34 | 2025-01-26, 5 |
| 35 | 2025-01-05, 8 |
| 36 | 2025-06-10, 5 |
| 37 | 2025-07-02, 0 |
| 38 | 2025-10-30, 0 |
| 39 | 2025-01-02, 0 |
| 40 | 2025-08-27, 0 |
| 41 | 2025-11-30, 10 |
| 42 | 2025-06-18, 4 |
| 43 | 2025-08-14, 0 |
| 44 | 2025-05-17, 1 |
| 45 | 2025-06-09, 8 |
| 46 | 2025-07-14, 4 |
| 47 | 2025-04-19, 9 |
| 48 | 2025-08-03, 8 |
| 49 | 2025-01-08, 9 |
| 50 | 2025-12-16, 3 |
| … and 70 more data points | |
Shape-aware skeleton with reserved space for legend and axes — no layout shift when real data arrives.
API Reference
CalendarHeatmapChart
| Property | Type | Default | Description |
|---|---|---|---|
| Data | object? | null | Calendar data as [date, value] pairs. |
| Year | int | current year | The year to display. |
| VisualMapMin | double | 0 | Minimum value for color mapping. |
| VisualMapMax | double | 10 | Maximum value for color mapping. |
| Colors | List<string>? | null | Custom color range (defaults to green shades). |
| IsLoading | bool | false | When true, renders a shape-matched loading skeleton in place of the chart. Bind to your async fetch state. |
| ShowLoadingSkeleton | bool | true | Set to false to opt out of the skeleton (chart area stays empty while IsLoading is true). |
| SkeletonKind | ChartSkeletonKind | (chart default) | Override the skeleton silhouette (Bars, Line, Area, Pie, Scatter, Grid, Generic). |
| SkeletonStyle | ChartSkeletonStyle | Phantom | Phantom renders the real chart with placeholder data and morphs to real data via ECharts animation. Silhouette falls back to the legacy SVG skeleton overlay. |
| ShowLoadingLabel | bool | true | Shows a small "Loading…" pill in the top-right corner whenever IsLoading is true. Layered on top of any SkeletonStyle. Set to false for bare visuals. (rc.18) |
| LoadingText | string? | "Loading…" | Label rendered next to the spinner inside the loading pill. Set to empty to show the spinner alone. (rc.18) |
| ShowTooltip | bool | true | Enables the hover tooltip showing date and value. |
| Width | string | "100%" | CSS width of the chart container. |
| Height | string | "350px" | CSS height of the chart container. |
| Theme | string? | null | Optional ECharts theme name override. |
| PhantomCycleMs | int | 1400 | Phantom-mode refresh interval in milliseconds. Lower = faster data cycling while loading. |
| ShowDataLabels | bool | false | When true, displays value labels inside each calendar cell. |
| LabelPosition | string | "inside" | Position of data labels relative to each cell. |
| LabelFormat | string? | null | Optional ECharts label formatter string for cell labels. |
| DataZoom | bool | false | Enables the interactive data-zoom slider beneath the chart. |
| Toolbox | bool | false | Shows the ECharts toolbox with export and zoom controls. |
| ColorPalette | List<string>? | null | Alternate full color palette applied to the chart. |
| AnimationDuration | int? | null | Animation duration in milliseconds when data changes. |
| AnimationEasing | string? | null | ECharts easing function name for animation curves. |