Graflume · Alpha
Calendar · Extreme-environment application
Explore daily intensity, seasonality, and gaps in a calendar grid. Combine container size, input method, display capability, and user preference instead of guessing a device name. Compare mobile, watch, e-paper, monochrome, dot-matrix, and standards-based extreme environments on the same chart.
Chart family · Default families
Calendar
Explore daily intensity, seasonality, and gaps in a calendar grid.
- Quick API
calendar()- Browser snapshot
graflume- mark
calendar- Presets
- 1
Extreme environments
Reconfigure for display, input, and device capability
Combine container size, input method, display capability, and user preference instead of guessing a device name. Compare mobile, watch, e-paper, monochrome, dot-matrix, and standards-based extreme environments on the same chart.
Fluid responsive
Reflow axes, legends, descriptions, and controls from the available container size.
960×540 · adaptive.profiles=responsive-fluidzoom-reflowshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
Mobile
Prioritize 44px touch targets, tap tooltips, and collapsed secondary information on a narrow portrait screen.
390×844 · adaptive.profiles=mobile-touchzoom-reflowcoarse-touchvirtual-keyboardshape-rectangledisplay-colorinput-coarsemotion-fullrenderer-canvas-spatial
Smartwatch
Keep essential marks, values, and stepped controls on a tiny or round screen, with the remaining detail reflowed below.
184×224 · adaptive.profiles=smartwatchzoom-reflowreduced-effectscoarse-touchlow-resourcecutout-roundshape-rounddisplay-colorinput-coarsemotion-reducedrenderer-canvas-spatialviewport-tiny
E-book and e-paper
Prefer stable frames, strong contrast, and the data table for low-refresh e-paper displays.
758×1024 · adaptive.profiles=ebook-paperprint-pagedreduced-effectslow-resourceshape-pageddisplay-e-inkinput-keyboardmotion-staticrenderer-canvas-spatial
Monochrome
Use strokes, markers, patterns, labels, and the table so color is never the only distinction.
640×400 · adaptive.profiles=monochromereduced-effectsshape-rectangledisplay-monochromeinput-finemotion-reducedrenderer-canvas-spatial
Dot-matrix display
Reduce decoration and mark density while using strong strokes, integer labels, and stepped zoom on a low-resolution display.
320×240 · adaptive.profiles=dot-matrixzoom-reflowreduced-effectskeyboard-switchlow-resourceshape-rectangledisplay-gridinput-keyboardmotion-staticrenderer-canvas-spatialviewport-tiny
400% zoom and reflow
Reflow prose to one dimension at the 320 CSS px equivalent while retaining chart-local zoom and pan.
320×480 · adaptive.profiles=zoom-reflowzoom-reflowshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
Foldable dual screen
Keep the chart and explanation in independent viewport segments without crossing the hinge.
720×640 · adaptive.profiles=foldable-dualfoldable-dualshape-dualdisplay-colorinput-finemotion-fullrenderer-canvas-spatial
TV and remote
Provide strong focus indication and D-pad, Enter, and Escape operation on a hoverless distance display.
1920×1080 · adaptive.profiles=tv-remotetv-remoteshape-rectangledisplay-colorinput-remotemotion-fullrenderer-canvas-spatial
Print and paged media
Pair a static chart with its description and table, hide controls, and avoid page breaks through the figure.
794×1123 · adaptive.profiles=print-pagedprint-pagedshape-pageddisplay-colorinput-finemotion-staticrenderer-canvas-spatial
Forced colors
Honor system colors and borders while retaining patterns, markers, and text as redundant cues.
640×400 · adaptive.profiles=forced-colorsforced-colorsshape-rectangledisplay-high-contrastinput-finemotion-fullrenderer-canvas-spatial
Reduced effects
Complete transitions immediately and use opaque surfaces and deferred work to reduce motion and transparency load.
640×400 · adaptive.profiles=reduced-effectsreduced-effectsshape-rectangledisplay-colorinput-finemotion-reducedrenderer-canvas-spatial
Coarse touch
Inspect values by tap without hover, keep targets at least 44px, and expose explicit zoom buttons.
390×844 · adaptive.profiles=coarse-touchcoarse-touchshape-rectangledisplay-colorinput-coarsemotion-fullrenderer-canvas-spatial
Keyboard and switch input
Reach every operation with Tab, arrows, Enter, Space, and Escape, with no drag-only action.
640×400 · adaptive.profiles=keyboard-switchkeyboard-switchshape-rectangledisplay-colorinput-keyboardmotion-fullrenderer-canvas-spatial
Low resource and slow network
Prefer progressive rendering, sampling, cancellable work, and a static fallback under constrained memory or connectivity.
640×400 · adaptive.profiles=low-resourcelow-resourceshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
RTL document
Follow RTL logical flow for prose and tabs while keeping axes, code, and data identifiers in technical LTR order.
640×400 · adaptive.profiles=rtlrtlshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
Vertical writing
Reflow vertical prose while keeping the chart and technical surfaces in an independent horizontal panel.
640×400 · adaptive.profiles=vertical-writingvertical-writingshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
Ultrawide and projection
Cap chart width instead of stretching indefinitely, using panelization and readable labels on ultrawide or projected surfaces.
1920×720 · adaptive.profiles=ultrawide-projectionultrawide-projectionshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
Screen reader and braille
Provide short and long descriptions, a semantic table, and status so Canvas or color is never the sole information path.
640×400 · adaptive.profiles=screenreader-braillescreenreader-brailleshape-nonvisualdisplay-colorinput-nonvisualmotion-fullrenderer-canvas-spatial
No scripting
A verified static preview, description, and collapsible row-data table preserve the essential information when scripting is unavailable.
640×400 · adaptive.profiles=no-scriptno-scriptshape-nonvisualdisplay-colorinput-finemotion-staticrenderer-static-fallback
XR and see-through display
Fall back safely to the ordinary 2D or WebGL panel when XR APIs are absent, duplicating depth cues in text and the table.
640×400 · adaptive.profiles=spatial-xrspatial-xrshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
Cutout and round display
Inset titles, marks, and controls around safe areas and round display bounds so they are not clipped.
184×224 · adaptive.profiles=cutout-roundcutout-roundshape-rounddisplay-colorinput-finemotion-fullrenderer-canvas-spatialviewport-tiny
Virtual keyboard viewport
Reflow focus controls, the chart, and the active explanation when a virtual keyboard reduces the visual viewport.
390×560 · adaptive.profiles=virtual-keyboardvirtual-keyboardshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
Extreme environment preview
Choose a profile above to preserve the same data and ChartSpec while reconfiguring the chart for display size, input method, display capability, and user preference.
StatusLoading
adaptivecapability-drivenno-user-agent-branching
- Legend:
legend · continuous · value - Point and range highlights:
highlights[] · datum · date - Custom callouts:
annotations[] · datum · date · callout · placement:auto - Interactive selection:
selection · multiple · toggle
Loading
Extreme environment preview · Row data
Row data and zero-copy TypedArray columns share one data contract.
datetemporal | valuequantitative |
|---|---|
| 2025-01-01 | 59 |
| 2025-01-02 | 60 |
| 2025-01-03 | 61 |
| 2025-01-04 | 45 |
| 2025-01-05 | 46 |
| 2025-01-06 | 64 |
| 2025-01-07 | 65 |
| 2025-01-08 | 65 |
| 2025-01-09 | 66 |
| 2025-01-10 | 67 |
| 2025-01-11 | 51 |
| 2025-01-12 | 51 |
| 2025-01-13 | 69 |
| 2025-01-14 | 70 |
| 2025-01-15 | 70 |
| 2025-01-16 | 70 |
| 2025-01-17 | 71 |
| 2025-01-18 | 54 |
| 2025-01-19 | 54 |
| 2025-01-20 | 71 |
| 2025-01-21 | 71 |
| 2025-01-22 | 71 |
| 2025-01-23 | 71 |
| 2025-01-24 | 71 |
| 2025-01-25 | 54 |
| 2025-01-26 | 53 |
| 2025-01-27 | 70 |
| 2025-01-28 | 70 |
| 2025-01-29 | 69 |
| 2025-01-30 | 68 |
| 2025-01-31 | 68 |
| 2025-02-01 | 50 |
| 2025-02-02 | 49 |
| 2025-02-03 | 65 |
| 2025-02-04 | 65 |
| 2025-02-05 | 64 |
| 2025-02-06 | 63 |
| 2025-02-07 | 62 |
| 2025-02-08 | 44 |
| 2025-02-09 | 43 |
| 2025-02-10 | 59 |
| 2025-02-11 | 57 |
| 2025-02-12 | 56 |
| 2025-02-13 | 55 |
| 2025-02-14 | 54 |
| 2025-02-15 | 36 |
| 2025-02-16 | 35 |
| 2025-02-17 | 51 |
| 2025-02-18 | 50 |
| 2025-02-19 | 49 |
| 2025-02-20 | 48 |
| 2025-02-21 | 47 |
| 2025-02-22 | 29 |
| 2025-02-23 | 28 |
| 2025-02-24 | 45 |
| 2025-02-25 | 44 |
| 2025-02-26 | 43 |
| 2025-02-27 | 43 |
| 2025-02-28 | 42 |
| 2025-03-01 | 25 |
| 2025-03-02 | 24 |
| 2025-03-03 | 41 |
| 2025-03-04 | 41 |
| 2025-03-05 | 41 |
| 2025-03-06 | 41 |
| 2025-03-07 | 41 |
| 2025-03-08 | 24 |
| 2025-03-09 | 24 |
| 2025-03-10 | 41 |
| 2025-03-11 | 41 |
| 2025-03-12 | 42 |
| 2025-03-13 | 42 |
| 2025-03-14 | 42 |
| 2025-03-15 | 26 |
| 2025-03-16 | 26 |
| 2025-03-17 | 44 |
| 2025-03-18 | 45 |
| 2025-03-19 | 45 |
| 2025-03-20 | 46 |
| 2025-03-21 | 47 |
| 2025-03-22 | 31 |
| 2025-03-23 | 31 |
| 2025-03-24 | 49 |
| 2025-03-25 | 50 |
| 2025-03-26 | 51 |
| 2025-03-27 | 52 |
| 2025-03-28 | 53 |
| 2025-03-29 | 36 |
| 2025-03-30 | 37 |
| 2025-03-31 | 55 |
| 2025-04-01 | 56 |
| 2025-04-02 | 56 |
| 2025-04-03 | 57 |
| 2025-04-04 | 58 |
| 2025-04-05 | 41 |
| 2025-04-06 | 42 |
| 2025-04-07 | 59 |
| 2025-04-08 | 60 |
| 2025-04-09 | 60 |
| 2025-04-10 | 60 |
| 2025-04-11 | 61 |
| 2025-04-12 | 44 |
| 2025-04-13 | 44 |
| 2025-04-14 | 61 |
| 2025-04-15 | 61 |
| 2025-04-16 | 61 |
| 2025-04-17 | 61 |
| 2025-04-18 | 60 |
| 2025-04-19 | 43 |
| 2025-04-20 | 43 |
| 2025-04-21 | 59 |
| 2025-04-22 | 59 |
| 2025-04-23 | 58 |
| 2025-04-24 | 58 |
| 2025-04-25 | 57 |
| 2025-04-26 | 39 |
| 2025-04-27 | 38 |
| 2025-04-28 | 54 |
| 2025-04-29 | 54 |
| 2025-04-30 | 53 |
| 2025-05-01 | 52 |
| 2025-05-02 | 51 |
| 2025-05-03 | 33 |
| 2025-05-04 | 32 |
| 2025-05-05 | 48 |
| 2025-05-06 | 47 |
| 2025-05-07 | 46 |
| 2025-05-08 | 44 |
Browser API · Portable schema
Browser API
Graflume.calendar()
const data = [
{
"date": "2025-01-01",
"value": 59
},
{
"date": "2025-01-02",
"value": 60
},
{
"date": "2025-01-03",
"value": 61
},
{
"date": "2025-01-04",
"value": 45
},
{
"date": "2025-01-05",
"value": 46
},
{
"date": "2025-01-06",
"value": 64
},
{
"date": "2025-01-07",
"value": 65
},
{
"date": "2025-01-08",
"value": 65
},
{
"date": "2025-01-09",
"value": 66
},
{
"date": "2025-01-10",
"value": 67
},
{
"date": "2025-01-11",
"value": 51
},
{
"date": "2025-01-12",
"value": 51
},
{
"date": "2025-01-13",
"value": 69
},
{
"date": "2025-01-14",
"value": 70
},
{
"date": "2025-01-15",
"value": 70
},
{
"date": "2025-01-16",
"value": 70
},
{
"date": "2025-01-17",
"value": 71
},
{
"date": "2025-01-18",
"value": 54
},
{
"date": "2025-01-19",
"value": 54
},
{
"date": "2025-01-20",
"value": 71
},
{
"date": "2025-01-21",
"value": 71
},
{
"date": "2025-01-22",
"value": 71
},
{
"date": "2025-01-23",
"value": 71
},
{
"date": "2025-01-24",
"value": 71
},
{
"date": "2025-01-25",
"value": 54
},
{
"date": "2025-01-26",
"value": 53
},
{
"date": "2025-01-27",
"value": 70
},
{
"date": "2025-01-28",
"value": 70
},
{
"date": "2025-01-29",
"value": 69
},
{
"date": "2025-01-30",
"value": 68
},
{
"date": "2025-01-31",
"value": 68
},
{
"date": "2025-02-01",
"value": 50
},
{
"date": "2025-02-02",
"value": 49
},
{
"date": "2025-02-03",
"value": 65
},
{
"date": "2025-02-04",
"value": 65
},
{
"date": "2025-02-05",
"value": 64
},
{
"date": "2025-02-06",
"value": 63
},
{
"date": "2025-02-07",
"value": 62
},
{
"date": "2025-02-08",
"value": 44
},
{
"date": "2025-02-09",
"value": 43
},
{
"date": "2025-02-10",
"value": 59
},
{
"date": "2025-02-11",
"value": 57
},
{
"date": "2025-02-12",
"value": 56
},
{
"date": "2025-02-13",
"value": 55
},
{
"date": "2025-02-14",
"value": 54
},
{
"date": "2025-02-15",
"value": 36
},
{
"date": "2025-02-16",
"value": 35
},
{
"date": "2025-02-17",
"value": 51
},
{
"date": "2025-02-18",
"value": 50
},
{
"date": "2025-02-19",
"value": 49
},
{
"date": "2025-02-20",
"value": 48
},
{
"date": "2025-02-21",
"value": 47
},
{
"date": "2025-02-22",
"value": 29
},
{
"date": "2025-02-23",
"value": 28
},
{
"date": "2025-02-24",
"value": 45
},
{
"date": "2025-02-25",
"value": 44
},
{
"date": "2025-02-26",
"value": 43
},
{
"date": "2025-02-27",
"value": 43
},
{
"date": "2025-02-28",
"value": 42
},
{
"date": "2025-03-01",
"value": 25
},
{
"date": "2025-03-02",
"value": 24
},
{
"date": "2025-03-03",
"value": 41
},
{
"date": "2025-03-04",
"value": 41
},
{
"date": "2025-03-05",
"value": 41
},
{
"date": "2025-03-06",
"value": 41
},
{
"date": "2025-03-07",
"value": 41
},
{
"date": "2025-03-08",
"value": 24
},
{
"date": "2025-03-09",
"value": 24
},
{
"date": "2025-03-10",
"value": 41
},
{
"date": "2025-03-11",
"value": 41
},
{
"date": "2025-03-12",
"value": 42
},
{
"date": "2025-03-13",
"value": 42
},
{
"date": "2025-03-14",
"value": 42
},
{
"date": "2025-03-15",
"value": 26
},
{
"date": "2025-03-16",
"value": 26
},
{
"date": "2025-03-17",
"value": 44
},
{
"date": "2025-03-18",
"value": 45
},
{
"date": "2025-03-19",
"value": 45
},
{
"date": "2025-03-20",
"value": 46
},
{
"date": "2025-03-21",
"value": 47
},
{
"date": "2025-03-22",
"value": 31
},
{
"date": "2025-03-23",
"value": 31
},
{
"date": "2025-03-24",
"value": 49
},
{
"date": "2025-03-25",
"value": 50
},
{
"date": "2025-03-26",
"value": 51
},
{
"date": "2025-03-27",
"value": 52
},
{
"date": "2025-03-28",
"value": 53
},
{
"date": "2025-03-29",
"value": 36
},
{
"date": "2025-03-30",
"value": 37
},
{
"date": "2025-03-31",
"value": 55
},
{
"date": "2025-04-01",
"value": 56
},
{
"date": "2025-04-02",
"value": 56
},
{
"date": "2025-04-03",
"value": 57
},
{
"date": "2025-04-04",
"value": 58
},
{
"date": "2025-04-05",
"value": 41
},
{
"date": "2025-04-06",
"value": 42
},
{
"date": "2025-04-07",
"value": 59
},
{
"date": "2025-04-08",
"value": 60
},
{
"date": "2025-04-09",
"value": 60
},
{
"date": "2025-04-10",
"value": 60
},
{
"date": "2025-04-11",
"value": 61
},
{
"date": "2025-04-12",
"value": 44
},
{
"date": "2025-04-13",
"value": 44
},
{
"date": "2025-04-14",
"value": 61
},
{
"date": "2025-04-15",
"value": 61
},
{
"date": "2025-04-16",
"value": 61
},
{
"date": "2025-04-17",
"value": 61
},
{
"date": "2025-04-18",
"value": 60
},
{
"date": "2025-04-19",
"value": 43
},
{
"date": "2025-04-20",
"value": 43
},
{
"date": "2025-04-21",
"value": 59
},
{
"date": "2025-04-22",
"value": 59
},
{
"date": "2025-04-23",
"value": 58
},
{
"date": "2025-04-24",
"value": 58
},
{
"date": "2025-04-25",
"value": 57
},
{
"date": "2025-04-26",
"value": 39
},
{
"date": "2025-04-27",
"value": 38
},
{
"date": "2025-04-28",
"value": 54
},
{
"date": "2025-04-29",
"value": 54
},
{
"date": "2025-04-30",
"value": 53
},
{
"date": "2025-05-01",
"value": 52
},
{
"date": "2025-05-02",
"value": 51
},
{
"date": "2025-05-03",
"value": 33
},
{
"date": "2025-05-04",
"value": 32
},
{
"date": "2025-05-05",
"value": 48
},
{
"date": "2025-05-06",
"value": 47
},
{
"date": "2025-05-07",
"value": 46
},
{
"date": "2025-05-08",
"value": 44
},
{
"date": "2025-05-09",
"value": 43
},
{
"date": "2025-05-10",
"value": 25
},
{
"date": "2025-05-11",
"value": 24
},
{
"date": "2025-05-12",
"value": 40
},
{
"date": "2025-05-13",
"value": 40
},
{
"date": "2025-05-14",
"value": 39
},
{
"date": "2025-05-15",
"value": 38
},
{
"date": "2025-05-16",
"value": 37
},
{
"date": "2025-05-17",
"value": 19
},
{
"date": "2025-05-18",
"value": 18
},
{
"date": "2025-05-19",
"value": 35
},
{
"date": "2025-05-20",
"value": 34
},
{
"date": "2025-05-21",
"value": 34
},
{
"date": "2025-05-22",
"value": 33
},
{
"date": "2025-05-23",
"value": 33
},
{
"date": "2025-05-24",
"value": 16
},
{
"date": "2025-05-25",
"value": 15
},
{
"date": "2025-05-26",
"value": 32
},
{
"date": "2025-05-27",
"value": 32
},
{
"date": "2025-05-28",
"value": 32
},
{
"date": "2025-05-29",
"value": 32
},
{
"date": "2025-05-30",
"value": 32
},
{
"date": "2025-05-31",
"value": 15
},
{
"date": "2025-06-01",
"value": 16
},
{
"date": "2025-06-02",
"value": 33
},
{
"date": "2025-06-03",
"value": 33
},
{
"date": "2025-06-04",
"value": 34
},
{
"date": "2025-06-05",
"value": 35
},
{
"date": "2025-06-06",
"value": 35
},
{
"date": "2025-06-07",
"value": 19
},
{
"date": "2025-06-08",
"value": 20
},
{
"date": "2025-06-09",
"value": 37
},
{
"date": "2025-06-10",
"value": 38
},
{
"date": "2025-06-11",
"value": 39
},
{
"date": "2025-06-12",
"value": 40
},
{
"date": "2025-06-13",
"value": 41
},
{
"date": "2025-06-14",
"value": 25
},
{
"date": "2025-06-15",
"value": 26
},
{
"date": "2025-06-16",
"value": 44
},
{
"date": "2025-06-17",
"value": 45
},
{
"date": "2025-06-18",
"value": 46
},
{
"date": "2025-06-19",
"value": 47
},
{
"date": "2025-06-20",
"value": 48
},
{
"date": "2025-06-21",
"value": 32
},
{
"date": "2025-06-22",
"value": 33
},
{
"date": "2025-06-23",
"value": 51
},
{
"date": "2025-06-24",
"value": 52
},
{
"date": "2025-06-25",
"value": 53
},
{
"date": "2025-06-26",
"value": 54
},
{
"date": "2025-06-27",
"value": 55
},
{
"date": "2025-06-28",
"value": 38
},
{
"date": "2025-06-29",
"value": 39
},
{
"date": "2025-06-30",
"value": 57
},
{
"date": "2025-07-01",
"value": 57
},
{
"date": "2025-07-02",
"value": 58
},
{
"date": "2025-07-03",
"value": 59
},
{
"date": "2025-07-04",
"value": 59
},
{
"date": "2025-07-05",
"value": 42
},
{
"date": "2025-07-06",
"value": 43
},
{
"date": "2025-07-07",
"value": 60
},
{
"date": "2025-07-08",
"value": 60
},
{
"date": "2025-07-09",
"value": 60
},
{
"date": "2025-07-10",
"value": 60
},
{
"date": "2025-07-11",
"value": 60
},
{
"date": "2025-07-12",
"value": 43
},
{
"date": "2025-07-13",
"value": 43
},
{
"date": "2025-07-14",
"value": 60
},
{
"date": "2025-07-15",
"value": 59
},
{
"date": "2025-07-16",
"value": 59
},
{
"date": "2025-07-17",
"value": 59
},
{
"date": "2025-07-18",
"value": 58
},
{
"date": "2025-07-19",
"value": 41
},
{
"date": "2025-07-20",
"value": 40
},
{
"date": "2025-07-21",
"value": 56
},
{
"date": "2025-07-22",
"value": 56
},
{
"date": "2025-07-23",
"value": 55
},
{
"date": "2025-07-24",
"value": 54
},
{
"date": "2025-07-25",
"value": 53
},
{
"date": "2025-07-26",
"value": 36
},
{
"date": "2025-07-27",
"value": 35
},
{
"date": "2025-07-28",
"value": 51
},
{
"date": "2025-07-29",
"value": 50
},
{
"date": "2025-07-30",
"value": 49
},
{
"date": "2025-07-31",
"value": 49
},
{
"date": "2025-08-01",
"value": 48
},
{
"date": "2025-08-02",
"value": 30
},
{
"date": "2025-08-03",
"value": 29
},
{
"date": "2025-08-04",
"value": 45
},
{
"date": "2025-08-05",
"value": 45
},
{
"date": "2025-08-06",
"value": 44
},
{
"date": "2025-08-07",
"value": 43
},
{
"date": "2025-08-08",
"value": 43
},
{
"date": "2025-08-09",
"value": 25
},
{
"date": "2025-08-10",
"value": 25
},
{
"date": "2025-08-11",
"value": 41
},
{
"date": "2025-08-12",
"value": 41
},
{
"date": "2025-08-13",
"value": 40
},
{
"date": "2025-08-14",
"value": 40
},
{
"date": "2025-08-15",
"value": 40
},
{
"date": "2025-08-16",
"value": 23
},
{
"date": "2025-08-17",
"value": 23
},
{
"date": "2025-08-18",
"value": 40
},
{
"date": "2025-08-19",
"value": 40
},
{
"date": "2025-08-20",
"value": 40
},
{
"date": "2025-08-21",
"value": 40
},
{
"date": "2025-08-22",
"value": 41
},
{
"date": "2025-08-23",
"value": 24
},
{
"date": "2025-08-24",
"value": 24
},
{
"date": "2025-08-25",
"value": 42
},
{
"date": "2025-08-26",
"value": 42
},
{
"date": "2025-08-27",
"value": 61
},
{
"date": "2025-08-28",
"value": 62
},
{
"date": "2025-08-29",
"value": 62
},
{
"date": "2025-08-30",
"value": 46
},
{
"date": "2025-08-31",
"value": 47
},
{
"date": "2025-09-01",
"value": 65
},
{
"date": "2025-09-02",
"value": 66
},
{
"date": "2025-09-03",
"value": 67
},
{
"date": "2025-09-04",
"value": 68
},
{
"date": "2025-09-05",
"value": 69
},
{
"date": "2025-09-06",
"value": 53
},
{
"date": "2025-09-07",
"value": 54
},
{
"date": "2025-09-08",
"value": 72
},
{
"date": "2025-09-09",
"value": 73
},
{
"date": "2025-09-10",
"value": 74
},
{
"date": "2025-09-11",
"value": 76
},
{
"date": "2025-09-12",
"value": 77
},
{
"date": "2025-09-13",
"value": 61
},
{
"date": "2025-09-14",
"value": 62
},
{
"date": "2025-09-15",
"value": 80
},
{
"date": "2025-09-16",
"value": 81
},
{
"date": "2025-09-17",
"value": 82
},
{
"date": "2025-09-18",
"value": 83
},
{
"date": "2025-09-19",
"value": 83
},
{
"date": "2025-09-20",
"value": 67
},
{
"date": "2025-09-21",
"value": 68
},
{
"date": "2025-09-22",
"value": 86
},
{
"date": "2025-09-23",
"value": 86
},
{
"date": "2025-09-24",
"value": 87
},
{
"date": "2025-09-25",
"value": 87
},
{
"date": "2025-09-26",
"value": 88
},
{
"date": "2025-09-27",
"value": 71
},
{
"date": "2025-09-28",
"value": 72
},
{
"date": "2025-09-29",
"value": 89
},
{
"date": "2025-09-30",
"value": 89
},
{
"date": "2025-10-01",
"value": 89
},
{
"date": "2025-10-02",
"value": 89
},
{
"date": "2025-10-03",
"value": 89
},
{
"date": "2025-10-04",
"value": 72
},
{
"date": "2025-10-05",
"value": 71
},
{
"date": "2025-10-06",
"value": 88
},
{
"date": "2025-10-07",
"value": 88
},
{
"date": "2025-10-08",
"value": 87
},
{
"date": "2025-10-09",
"value": 87
},
{
"date": "2025-10-10",
"value": 86
},
{
"date": "2025-10-11",
"value": 69
},
{
"date": "2025-10-12",
"value": 68
},
{
"date": "2025-10-13",
"value": 84
},
{
"date": "2025-10-14",
"value": 83
},
{
"date": "2025-10-15",
"value": 83
},
{
"date": "2025-10-16",
"value": 82
},
{
"date": "2025-10-17",
"value": 81
},
{
"date": "2025-10-18",
"value": 63
},
{
"date": "2025-10-19",
"value": 62
},
{
"date": "2025-10-20",
"value": 78
},
{
"date": "2025-10-21",
"value": 77
},
{
"date": "2025-10-22",
"value": 76
},
{
"date": "2025-10-23",
"value": 75
},
{
"date": "2025-10-24",
"value": 74
},
{
"date": "2025-10-25",
"value": 56
},
{
"date": "2025-10-26",
"value": 55
},
{
"date": "2025-10-27",
"value": 72
},
{
"date": "2025-10-28",
"value": 71
},
{
"date": "2025-10-29",
"value": 70
},
{
"date": "2025-10-30",
"value": 69
},
{
"date": "2025-10-31",
"value": 68
},
{
"date": "2025-11-01",
"value": 51
},
{
"date": "2025-11-02",
"value": 50
},
{
"date": "2025-11-03",
"value": 66
},
{
"date": "2025-11-04",
"value": 66
},
{
"date": "2025-11-05",
"value": 65
},
{
"date": "2025-11-06",
"value": 65
},
{
"date": "2025-11-07",
"value": 64
},
{
"date": "2025-11-08",
"value": 47
},
{
"date": "2025-11-09",
"value": 47
},
{
"date": "2025-11-10",
"value": 64
},
{
"date": "2025-11-11",
"value": 64
},
{
"date": "2025-11-12",
"value": 64
},
{
"date": "2025-11-13",
"value": 64
},
{
"date": "2025-11-14",
"value": 64
},
{
"date": "2025-11-15",
"value": 47
},
{
"date": "2025-11-16",
"value": 47
},
{
"date": "2025-11-17",
"value": 65
},
{
"date": "2025-11-18",
"value": 65
},
{
"date": "2025-11-19",
"value": 65
},
{
"date": "2025-11-20",
"value": 66
},
{
"date": "2025-11-21",
"value": 66
},
{
"date": "2025-11-22",
"value": 50
},
{
"date": "2025-11-23",
"value": 51
},
{
"date": "2025-11-24",
"value": 68
},
{
"date": "2025-11-25",
"value": 69
},
{
"date": "2025-11-26",
"value": 70
},
{
"date": "2025-11-27",
"value": 71
},
{
"date": "2025-11-28",
"value": 72
},
{
"date": "2025-11-29",
"value": 55
},
{
"date": "2025-11-30",
"value": 56
},
{
"date": "2025-12-01",
"value": 74
},
{
"date": "2025-12-02",
"value": 75
},
{
"date": "2025-12-03",
"value": 76
},
{
"date": "2025-12-04",
"value": 77
},
{
"date": "2025-12-05",
"value": 78
},
{
"date": "2025-12-06",
"value": 61
},
{
"date": "2025-12-07",
"value": 62
},
{
"date": "2025-12-08",
"value": 80
},
{
"date": "2025-12-09",
"value": 81
},
{
"date": "2025-12-10",
"value": 81
},
{
"date": "2025-12-11",
"value": 82
},
{
"date": "2025-12-12",
"value": 83
},
{
"date": "2025-12-13",
"value": 66
},
{
"date": "2025-12-14",
"value": 67
},
{
"date": "2025-12-15",
"value": 84
},
{
"date": "2025-12-16",
"value": 85
},
{
"date": "2025-12-17",
"value": 85
},
{
"date": "2025-12-18",
"value": 85
},
{
"date": "2025-12-19",
"value": 86
},
{
"date": "2025-12-20",
"value": 69
},
{
"date": "2025-12-21",
"value": 69
},
{
"date": "2025-12-22",
"value": 86
},
{
"date": "2025-12-23",
"value": 86
},
{
"date": "2025-12-24",
"value": 85
},
{
"date": "2025-12-25",
"value": 85
},
{
"date": "2025-12-26",
"value": 85
},
{
"date": "2025-12-27",
"value": 67
},
{
"date": "2025-12-28",
"value": 67
},
{
"date": "2025-12-29",
"value": 83
},
{
"date": "2025-12-30",
"value": 83
},
{
"date": "2025-12-31",
"value": 82
}
];
const options = {
"accessibility": {
"description": "A complete year of daily activity with weekday rhythm and a release lift. The example uses curated, deterministic data and exposes its exact values in a semantic table.",
"label": "Calendar chart: A complete year of daily activity with weekday rhythm and a release lift"
},
"annotations": [
{
"connector": {
"visible": true
},
"detail": "Attach user-authored safe text to a datum, axis range, or normalized plot position.",
"id": "manual-callout",
"placement": "auto",
"style": {
"maxWidth": 220,
"padding": 8
},
"target": {
"field": "date",
"type": "datum",
"value": "2025-03-06"
},
"text": "Point and range highlights · 2025-03-06"
}
],
"axes": {
"x": false,
"y": false
},
"create": {
"adaptive": {
"profiles": "auto"
}
},
"height": 620,
"highlights": [
{
"id": "manual-focus",
"padding": 7,
"target": {
"field": "date",
"type": "datum",
"value": "2025-03-06"
}
}
],
"interaction": {
"controls": {
"annotations": true,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"selection": {
"ariaLabel": "Interactive selection",
"clearOnBackground": true,
"clearOnEscape": true,
"highlight": {
"padding": 5
},
"key": "date",
"mode": "multiple",
"toggle": true
},
"tooltip": {
"fields": [
{
"dateStyle": "long",
"field": "date",
"format": "date",
"label": "Date",
"timeZone": "UTC"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Calendar",
"trigger": "mark"
}
},
"legend": {
"field": "value",
"interactive": false,
"labels": {
"hide": "Hide",
"show": "Show"
},
"maxItems": 8,
"mode": "continuous",
"orientation": "horizontal",
"position": "bottom",
"title": "Value",
"visible": true
},
"locale": "en",
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "A complete year of daily activity with weekday rhythm and a release lift",
"text": "Calendar chart"
},
"width": "container",
"x": {
"field": "date",
"title": "Date",
"type": "temporal"
},
"y": {
"field": "value",
"title": "Daily sessions",
"type": "quantitative"
}
};
Graflume.calendar('#chart', data, options);Portable schema
ChartSpec 0.1 · options
{
"accessibility": {
"description": "A complete year of daily activity with weekday rhythm and a release lift. The example uses curated, deterministic data and exposes its exact values in a semantic table.",
"label": "Calendar chart: A complete year of daily activity with weekday rhythm and a release lift"
},
"annotations": [
{
"connector": {
"visible": true
},
"detail": "Attach user-authored safe text to a datum, axis range, or normalized plot position.",
"id": "manual-callout",
"placement": "auto",
"style": {
"maxWidth": 220,
"padding": 8
},
"target": {
"field": "date",
"type": "datum",
"value": "2025-03-06"
},
"text": "Point and range highlights · 2025-03-06"
}
],
"axes": {
"x": false,
"y": false
},
"create": {
"adaptive": {
"profiles": "auto"
}
},
"height": 620,
"highlights": [
{
"id": "manual-focus",
"padding": 7,
"target": {
"field": "date",
"type": "datum",
"value": "2025-03-06"
}
}
],
"interaction": {
"controls": {
"annotations": true,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"selection": {
"ariaLabel": "Interactive selection",
"clearOnBackground": true,
"clearOnEscape": true,
"highlight": {
"padding": 5
},
"key": "date",
"mode": "multiple",
"toggle": true
},
"tooltip": {
"fields": [
{
"dateStyle": "long",
"field": "date",
"format": "date",
"label": "Date",
"timeZone": "UTC"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Calendar",
"trigger": "mark"
}
},
"legend": {
"field": "value",
"interactive": false,
"labels": {
"hide": "Hide",
"show": "Show"
},
"maxItems": 8,
"mode": "continuous",
"orientation": "horizontal",
"position": "bottom",
"title": "Value",
"visible": true
},
"locale": "en",
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "A complete year of daily activity with weekday rhythm and a release lift",
"text": "Calendar chart"
},
"width": "container",
"x": {
"field": "date",
"title": "Date",
"type": "temporal"
},
"y": {
"field": "value",
"title": "Daily sessions",
"type": "quantitative"
}
}