Skip to content
commit-766c8d6756a1

Interactive heatmap

Intensity patterns across category grids or ordered calendar dates.

Purpose
Reveal concentration, gaps, and repeated time patterns across two categorical dimensions.
Use when
Relative intensity across a manageable grid is the question.
Avoid when
Exact cell comparison, sequence, or color-independent interpretation is primary; use a table instead.
Equivalent data
The disclosure below preserves every category pair, value, and explicit no-data cell.
Exact heatmap values
SeriesX categoryY categoryValue
Activity12aSaturday5
Activity1aSaturday1
Activity2aSaturdayNo data
Activity3aSaturdayNo data
Activity4aSaturdayNo data
Activity5aSaturdayNo data
Activity6aSaturdayNo data
Activity7aSaturdayNo data
Activity8aSaturdayNo data
Activity9aSaturdayNo data
Activity10aSaturdayNo data
Activity11aSaturday2
Activity12pSaturday4
Activity1pSaturday1
Activity2pSaturday1
Activity3pSaturday3
Activity4pSaturday4
Activity5pSaturday6
Activity6pSaturday4
Activity7pSaturday4
Activity8pSaturday3
Activity9pSaturday3
Activity10pSaturday2
Activity11pSaturday5
Activity12aFriday7
Activity1aFridayNo data
Activity2aFridayNo data
Activity3aFridayNo data
Activity4aFridayNo data
Activity5aFridayNo data
Activity6aFridayNo data
Activity7aFridayNo data
Activity8aFridayNo data
Activity9aFridayNo data
Activity10aFriday5
Activity11aFriday2
Activity12pFriday2
Activity1pFriday6
Activity2pFriday9
Activity3pFriday11
Activity4pFriday6
Activity5pFriday7
Activity6pFriday8
Activity7pFriday12
Activity8pFriday5
Activity9pFriday5
Activity10pFriday7
Activity11pFriday2
Activity12aThursday1
Activity1aThursday1
Activity2aThursdayNo data
Activity3aThursdayNo data
Activity4aThursdayNo data
Activity5aThursdayNo data
Activity6aThursdayNo data
Activity7aThursdayNo data
Activity8aThursdayNo data
Activity9aThursdayNo data
Activity10aThursday3
Activity11aThursday2
Activity12pThursday1
Activity1pThursday9
Activity2pThursday8
Activity3pThursday10
Activity4pThursday6
Activity5pThursday5
Activity6pThursday5
Activity7pThursday5
Activity8pThursday7
Activity9pThursday4
Activity10pThursday2
Activity11pThursday4
Activity12aWednesday7
Activity1aWednesday3
Activity2aWednesdayNo data
Activity3aWednesdayNo data
Activity4aWednesdayNo data
Activity5aWednesdayNo data
Activity6aWednesdayNo data
Activity7aWednesdayNo data
Activity8aWednesday1
Activity9aWednesdayNo data
Activity10aWednesday5
Activity11aWednesday4
Activity12pWednesday7
Activity1pWednesday14
Activity2pWednesday13
Activity3pWednesday12
Activity4pWednesday9
Activity5pWednesday5
Activity6pWednesday5
Activity7pWednesday10
Activity8pWednesday6
Activity9pWednesday4
Activity10pWednesday4
Activity11pWednesday1
Activity12aTuesday1
Activity1aTuesday3
Activity2aTuesdayNo data
Activity3aTuesdayNo data
Activity4aTuesdayNo data
Activity5aTuesday1
Activity6aTuesdayNo data
Activity7aTuesdayNo data
Activity8aTuesdayNo data
Activity9aTuesday2
Activity10aTuesday4
Activity11aTuesday4
Activity12pTuesday2
Activity1pTuesday4
Activity2pTuesday4
Activity3pTuesday14
Activity4pTuesday12
Activity5pTuesday1
Activity6pTuesday8
Activity7pTuesday5
Activity8pTuesday3
Activity9pTuesday7
Activity10pTuesday3
Activity11pTuesdayNo data
Activity12aMonday2
Activity1aMonday1
Activity2aMondayNo data
Activity3aMonday3
Activity4aMondayNo data
Activity5aMondayNo data
Activity6aMondayNo data
Activity7aMondayNo data
Activity8aMonday2
Activity9aMondayNo data
Activity10aMonday4
Activity11aMonday1
Activity12pMonday5
Activity1pMonday10
Activity2pMonday5
Activity3pMonday7
Activity4pMonday11
Activity5pMonday6
Activity6pMondayNo data
Activity7pMonday5
Activity8pMonday3
Activity9pMonday4
Activity10pMonday2
Activity11pMondayNo data
Activity12aSunday1
Activity1aSundayNo data
Activity2aSundayNo data
Activity3aSundayNo data
Activity4aSundayNo data
Activity5aSundayNo data
Activity6aSundayNo data
Activity7aSundayNo data
Activity8aSundayNo data
Activity9aSundayNo data
Activity10aSunday1
Activity11aSundayNo data
Activity12pSunday2
Activity1pSunday1
Activity2pSunday3
Activity3pSunday4
Activity4pSundayNo data
Activity5pSundayNo data
Activity6pSundayNo data
Activity7pSundayNo data
Activity8pSunday1
Activity9pSunday2
Activity10pSunday2
Activity11pSunday6
Usage Example
@interactiveheatmap.HeatMap(interactiveheatmap.Config{
  Label: "Weekly activity by hour",
  XAxis: []string{
    "12a", "1a", "2a", "3a", "4a", "5a", "6a", "7a", "8a", "9a", "10a", "11a",
    "12p", "1p", "2p", "3p", "4p", "5p", "6p", "7p", "8p", "9p", "10p", "11p",
  },
  YAxis: []string{"Saturday", "Friday", "Thursday", "Wednesday", "Tuesday", "Monday", "Sunday"},
  ValueRange: interactiveheatmap.ValueRange{
    Min: 0, Max: 10, Calculable: chart.Bool(true),
  },
  SplitArea: chart.Bool(true),
  Series: []interactiveheatmap.Series{{
    Name: "Activity",
    Data: []interactiveheatmap.Data{
      {X: 0, Y: 0, Value: 5},
      {X: 1, Y: 0, Value: 1},
      {X: 2, Y: 0, Missing: true},
    },
  }},
})

Calendar coordinates

A full deterministic year preserves the source date range, value domain, cell borders, and explicit no-data days while using responsive cell sizing.

Exact heatmap values
SeriesDateValue
Calendar activity2024-01-0120
Calendar activity2024-01-029
Calendar activity2024-01-038
Calendar activity2024-01-0414
Calendar activity2024-01-0513
Calendar activity2024-01-0618
Calendar activity2024-01-0710
Calendar activity2024-01-085
Calendar activity2024-01-094
Calendar activity2024-01-1015
Calendar activity2024-01-1111
Calendar activity2024-01-1213
Calendar activity2024-01-1318
Calendar activity2024-01-1417
Calendar activity2024-01-151
Calendar activity2024-01-1611
Calendar activity2024-01-17No data
Calendar activity2024-01-1820
Calendar activity2024-01-1914
Calendar activity2024-01-205
Calendar activity2024-01-2117
Calendar activity2024-01-229
Calendar activity2024-01-2317
Calendar activity2024-01-2413
Calendar activity2024-01-2515
Calendar activity2024-01-2610
Calendar activity2024-01-271
Calendar activity2024-01-2813
Calendar activity2024-01-2918
Calendar activity2024-01-309
Calendar activity2024-01-317
Calendar activity2024-02-013
Calendar activity2024-02-0220
Calendar activity2024-02-0311
Calendar activity2024-02-043
Calendar activity2024-02-0520
Calendar activity2024-02-06No data
Calendar activity2024-02-077
Calendar activity2024-02-0812
Calendar activity2024-02-0918
Calendar activity2024-02-1013
Calendar activity2024-02-1110
Calendar activity2024-02-1213
Calendar activity2024-02-13No data
Calendar activity2024-02-1413
Calendar activity2024-02-1515
Calendar activity2024-02-161
Calendar activity2024-02-174
Calendar activity2024-02-1813
Calendar activity2024-02-1918
Calendar activity2024-02-206
Calendar activity2024-02-217
Calendar activity2024-02-2212
Calendar activity2024-02-23No data
Calendar activity2024-02-241
Calendar activity2024-02-254
Calendar activity2024-02-262
Calendar activity2024-02-273
Calendar activity2024-02-2819
Calendar activity2024-02-2920
Calendar activity2024-03-015
Calendar activity2024-03-02No data
Calendar activity2024-03-0315
Calendar activity2024-03-043
Calendar activity2024-03-0519
Calendar activity2024-03-0611
Calendar activity2024-03-0714
Calendar activity2024-03-088
Calendar activity2024-03-095
Calendar activity2024-03-102
Calendar activity2024-03-111
Calendar activity2024-03-12No data
Calendar activity2024-03-138
Calendar activity2024-03-142
Calendar activity2024-03-153
Calendar activity2024-03-1618
Calendar activity2024-03-177
Calendar activity2024-03-187
Calendar activity2024-03-1913
Calendar activity2024-03-205
Calendar activity2024-03-21No data
Calendar activity2024-03-2215
Calendar activity2024-03-237
Calendar activity2024-03-2410
Calendar activity2024-03-255
Calendar activity2024-03-2610
Calendar activity2024-03-2711
Calendar activity2024-03-2820
Calendar activity2024-03-298
Calendar activity2024-03-3019
Calendar activity2024-03-3120
Calendar activity2024-04-0110
Calendar activity2024-04-026
Calendar activity2024-04-0319
Calendar activity2024-04-043
Calendar activity2024-04-054
Calendar activity2024-04-066
Calendar activity2024-04-076
Calendar activity2024-04-0813
Calendar activity2024-04-092
Calendar activity2024-04-106
Calendar activity2024-04-1110
Calendar activity2024-04-1212
Calendar activity2024-04-1317
Calendar activity2024-04-145
Calendar activity2024-04-1517
Calendar activity2024-04-167
Calendar activity2024-04-171
Calendar activity2024-04-18No data
Calendar activity2024-04-1919
Calendar activity2024-04-2018
Calendar activity2024-04-217
Calendar activity2024-04-2213
Calendar activity2024-04-238
Calendar activity2024-04-2412
Calendar activity2024-04-2519
Calendar activity2024-04-2620
Calendar activity2024-04-2716
Calendar activity2024-04-28No data
Calendar activity2024-04-293
Calendar activity2024-04-302
Calendar activity2024-05-0113
Calendar activity2024-05-0218
Calendar activity2024-05-036
Calendar activity2024-05-0419
Calendar activity2024-05-056
Calendar activity2024-05-0620
Calendar activity2024-05-074
Calendar activity2024-05-087
Calendar activity2024-05-0918
Calendar activity2024-05-103
Calendar activity2024-05-1118
Calendar activity2024-05-1213
Calendar activity2024-05-135
Calendar activity2024-05-1412
Calendar activity2024-05-1513
Calendar activity2024-05-168
Calendar activity2024-05-175
Calendar activity2024-05-183
Calendar activity2024-05-1918
Calendar activity2024-05-203
Calendar activity2024-05-2114
Calendar activity2024-05-2210
Calendar activity2024-05-2313
Calendar activity2024-05-2414
Calendar activity2024-05-2511
Calendar activity2024-05-262
Calendar activity2024-05-2714
Calendar activity2024-05-2811
Calendar activity2024-05-2917
Calendar activity2024-05-304
Calendar activity2024-05-3119
Calendar activity2024-06-0119
Calendar activity2024-06-0219
Calendar activity2024-06-032
Calendar activity2024-06-0410
Calendar activity2024-06-053
Calendar activity2024-06-06No data
Calendar activity2024-06-0716
Calendar activity2024-06-0814
Calendar activity2024-06-0910
Calendar activity2024-06-10No data
Calendar activity2024-06-111
Calendar activity2024-06-12No data
Calendar activity2024-06-1315
Calendar activity2024-06-146
Calendar activity2024-06-15No data
Calendar activity2024-06-1615
Calendar activity2024-06-17No data
Calendar activity2024-06-1810
Calendar activity2024-06-1915
Calendar activity2024-06-203
Calendar activity2024-06-215
Calendar activity2024-06-22No data
Calendar activity2024-06-235
Calendar activity2024-06-2416
Calendar activity2024-06-251
Calendar activity2024-06-2615
Calendar activity2024-06-2715
Calendar activity2024-06-285
Calendar activity2024-06-2919
Calendar activity2024-06-3018
Calendar activity2024-07-0113
Calendar activity2024-07-02No data
Calendar activity2024-07-0311
Calendar activity2024-07-04No data
Calendar activity2024-07-059
Calendar activity2024-07-0618
Calendar activity2024-07-074
Calendar activity2024-07-087
Calendar activity2024-07-098
Calendar activity2024-07-102
Calendar activity2024-07-1117
Calendar activity2024-07-129
Calendar activity2024-07-139
Calendar activity2024-07-1410
Calendar activity2024-07-1511
Calendar activity2024-07-1612
Calendar activity2024-07-1720
Calendar activity2024-07-182
Calendar activity2024-07-1918
Calendar activity2024-07-20No data
Calendar activity2024-07-2111
Calendar activity2024-07-2219
Calendar activity2024-07-2314
Calendar activity2024-07-242
Calendar activity2024-07-252
Calendar activity2024-07-26No data
Calendar activity2024-07-2719
Calendar activity2024-07-2812
Calendar activity2024-07-2916
Calendar activity2024-07-303
Calendar activity2024-07-3117
Calendar activity2024-08-0118
Calendar activity2024-08-024
Calendar activity2024-08-0312
Calendar activity2024-08-0419
Calendar activity2024-08-052
Calendar activity2024-08-067
Calendar activity2024-08-076
Calendar activity2024-08-08No data
Calendar activity2024-08-0919
Calendar activity2024-08-1014
Calendar activity2024-08-1119
Calendar activity2024-08-1217
Calendar activity2024-08-1312
Calendar activity2024-08-144
Calendar activity2024-08-1516
Calendar activity2024-08-1613
Calendar activity2024-08-1711
Calendar activity2024-08-1810
Calendar activity2024-08-1911
Calendar activity2024-08-204
Calendar activity2024-08-213
Calendar activity2024-08-2211
Calendar activity2024-08-231
Calendar activity2024-08-2416
Calendar activity2024-08-255
Calendar activity2024-08-263
Calendar activity2024-08-276
Calendar activity2024-08-28No data
Calendar activity2024-08-2915
Calendar activity2024-08-3012
Calendar activity2024-08-312
Calendar activity2024-09-019
Calendar activity2024-09-022
Calendar activity2024-09-0317
Calendar activity2024-09-0416
Calendar activity2024-09-0510
Calendar activity2024-09-063
Calendar activity2024-09-0719
Calendar activity2024-09-081
Calendar activity2024-09-0911
Calendar activity2024-09-1016
Calendar activity2024-09-112
Calendar activity2024-09-125
Calendar activity2024-09-139
Calendar activity2024-09-1417
Calendar activity2024-09-1510
Calendar activity2024-09-16No data
Calendar activity2024-09-178
Calendar activity2024-09-187
Calendar activity2024-09-192
Calendar activity2024-09-209
Calendar activity2024-09-2111
Calendar activity2024-09-2218
Calendar activity2024-09-2314
Calendar activity2024-09-2419
Calendar activity2024-09-2517
Calendar activity2024-09-261
Calendar activity2024-09-2717
Calendar activity2024-09-2810
Calendar activity2024-09-2910
Calendar activity2024-09-306
Calendar activity2024-10-0118
Calendar activity2024-10-02No data
Calendar activity2024-10-039
Calendar activity2024-10-049
Calendar activity2024-10-059
Calendar activity2024-10-062
Calendar activity2024-10-073
Calendar activity2024-10-0810
Calendar activity2024-10-099
Calendar activity2024-10-1019
Calendar activity2024-10-115
Calendar activity2024-10-1219
Calendar activity2024-10-1317
Calendar activity2024-10-141
Calendar activity2024-10-154
Calendar activity2024-10-168
Calendar activity2024-10-171
Calendar activity2024-10-186
Calendar activity2024-10-1914
Calendar activity2024-10-206
Calendar activity2024-10-21No data
Calendar activity2024-10-2213
Calendar activity2024-10-238
Calendar activity2024-10-2418
Calendar activity2024-10-25No data
Calendar activity2024-10-2617
Calendar activity2024-10-2711
Calendar activity2024-10-28No data
Calendar activity2024-10-294
Calendar activity2024-10-3020
Calendar activity2024-10-314
Calendar activity2024-11-0110
Calendar activity2024-11-0219
Calendar activity2024-11-0314
Calendar activity2024-11-0419
Calendar activity2024-11-054
Calendar activity2024-11-065
Calendar activity2024-11-079
Calendar activity2024-11-0815
Calendar activity2024-11-093
Calendar activity2024-11-1015
Calendar activity2024-11-119
Calendar activity2024-11-129
Calendar activity2024-11-136
Calendar activity2024-11-1414
Calendar activity2024-11-157
Calendar activity2024-11-1610
Calendar activity2024-11-179
Calendar activity2024-11-187
Calendar activity2024-11-198
Calendar activity2024-11-204
Calendar activity2024-11-2116
Calendar activity2024-11-2215
Calendar activity2024-11-2310
Calendar activity2024-11-244
Calendar activity2024-11-2518
Calendar activity2024-11-26No data
Calendar activity2024-11-2713
Calendar activity2024-11-2818
Calendar activity2024-11-294
Calendar activity2024-11-3010
Calendar activity2024-12-017
Calendar activity2024-12-0213
Calendar activity2024-12-033
Calendar activity2024-12-0419
Calendar activity2024-12-05No data
Calendar activity2024-12-0610
Calendar activity2024-12-07No data
Calendar activity2024-12-0816
Calendar activity2024-12-0917
Calendar activity2024-12-1018
Calendar activity2024-12-118
Calendar activity2024-12-121
Calendar activity2024-12-138
Calendar activity2024-12-1412
Calendar activity2024-12-153
Calendar activity2024-12-1615
Calendar activity2024-12-172
Calendar activity2024-12-186
Calendar activity2024-12-1918
Calendar activity2024-12-2012
Calendar activity2024-12-2115
Calendar activity2024-12-224
Calendar activity2024-12-2319
Calendar activity2024-12-245
Calendar activity2024-12-255
Calendar activity2024-12-26No data
Calendar activity2024-12-275
Calendar activity2024-12-2812
Calendar activity2024-12-295
Calendar activity2024-12-3015
Calendar activity2024-12-3112
Calendar coordinates
// Add "time" to the templ file's Go import block.
@interactiveheatmap.HeatMap(interactiveheatmap.Config{
  Label: "Calendar activity",
  Coordinate: interactiveheatmap.CoordinateCalendar,
  Calendar: &interactiveheatmap.Calendar{
    Start: time.Date(2024, time.January, 1, 0, 0, 0, 0, time.UTC),
    End: time.Date(2024, time.December, 31, 0, 0, 0, 0, time.UTC),
    Options: chart.CalendarOptions{
      Top: "100", Left: "30", Right: "30",
      CellSize: "auto", Orient: "horizontal",
      CellStyle: &chart.ItemStyle{BorderWidth: 0.5},
      MonthLabel: &chart.CalendarLabelOptions{FontSize: 7},
    },
  },
  ValueRange: interactiveheatmap.ValueRange{Min: 0, Max: 20},
  Series: []interactiveheatmap.Series{{
    Name: "Calendar activity",
    Data: []interactiveheatmap.Data{
      {Date: time.Date(2024, time.January, 1, 0, 0, 0, 0, time.UTC), Value: 12},
      {Date: time.Date(2024, time.January, 2, 0, 0, 0, 0, time.UTC), Missing: true},
      {Date: time.Date(2024, time.January, 3, 0, 0, 0, 0, time.UTC), Value: 7},
    },
  }},
})

Use a category grid

Choose Cartesian coordinates for two finite category sets such as weekday and hour. Split areas help readers track dense rows and columns.

Use a calendar

Choose calendar coordinates when adjacency and seasonal gaps matter. Keep the date range explicit and use responsive cell sizing inside flexible layouts.

Cold to warm

The default scale follows theme-aware low, middle, and high tokens. Explicit chart colors remain caller-owned when a specialized scale is required.

Missing is not zero

Mark absent observations with Missing. Zero remains a valid measured value; both states stay distinct in the chart data and exact-value table.

Equivalent data

Every example includes a bounded, scrollable exact-value table. Use that table alone when exact comparison matters more than spatial pattern.

Go API

v0.0.1

The examples above cover behavior and composition. pkg.go.dev is the canonical reference for exported types, functions, methods, and Go documentation.

github.com/araihu/goshtoso-charts/components/interactive/heatmap

Enabled, disabled, hidden, and omitted wrapper behavior, controls, export, and client transitions are shared by every chart. Review chart controls, then compare static/vector and interactive capabilities.

Open v0.0.1 API