ARIA · table fallbackAccessibility
Canvas ARIA metadata is paired with a text summary and table fallback.
Graflume · Alpha
Compare activity across five global cities on built-in Natural Earth 1:110m country boundaries, with no external tile/API requests.
Chart family · Default families
Compare activity across five global cities on built-in Natural Earth 1:110m country boundaries, with no external tile/API requests.
map()graflumemapBasic implementation
Start with only the required data and family encoding. Expand the code to run the same example.
Compare activity across five global cities on built-in Natural Earth 1:110m country boundaries, with no external tile/API requests.
StatusLoading
minimal-implementationLoading
Row data and zero-copy TypedArray columns share one data contract.
longitudequantitative | latitudequantitative | valuequantitative |
|---|---|---|
| 126.98 | 37.57 | 92 |
| 139.69 | 35.68 | 78 |
| 103.82 | 1.35 | 64 |
| 77.21 | 28.61 | 58 |
| 2.35 | 48.86 | 73 |
| -74 | 40.71 | 88 |
| -122.42 | 37.77 | 69 |
| 151.21 | -33.87 | 51 |
Browser API
const data = [
{
"latitude": 37.57,
"latitude2": 35.68,
"longitude": 126.98,
"longitude2": 139.69,
"name": "Seoul",
"value": 92
},
{
"latitude": 35.68,
"latitude2": 1.35,
"longitude": 139.69,
"longitude2": 103.82,
"name": "Tokyo",
"value": 78
},
{
"latitude": 1.35,
"latitude2": 28.61,
"longitude": 103.82,
"longitude2": 77.21,
"name": "Singapore",
"value": 64
},
{
"latitude": 28.61,
"latitude2": 48.86,
"longitude": 77.21,
"longitude2": 2.35,
"name": "Delhi",
"value": 58
},
{
"latitude": 48.86,
"latitude2": 40.71,
"longitude": 2.35,
"longitude2": -74,
"name": "Paris",
"value": 73
},
{
"latitude": 40.71,
"latitude2": 37.77,
"longitude": -74,
"longitude2": -122.42,
"name": "New York",
"value": 88
},
{
"latitude": 37.77,
"latitude2": 19.43,
"longitude": -122.42,
"longitude2": -99.13,
"name": "San Francisco",
"value": 69
},
{
"latitude": -33.87,
"latitude2": 37.57,
"longitude": 151.21,
"longitude2": 126.98,
"name": "Sydney",
"value": 51
}
];
const options = {
"axes": {
"x": false,
"y": false
},
"height": 620,
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
};
Graflume.map('#chart', data, options);Portable schema
{
"axes": {
"x": false,
"y": false
},
"height": 620,
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
}Common features
Use the tabs to compare header, tooltip, theme, legend, highlight, callout, selection, view controls, and accessibility one feature at a time. Hover over a data mark. On supported charts, move the pointer along the axis to see the nearest value. All exact values are available in the table below.
Add a chart title and supporting description inside the visualization.
StatusLoading
headerLoading
Row data and zero-copy TypedArray columns share one data contract.
longitudequantitative | latitudequantitative | valuequantitative |
|---|---|---|
| 126.98 | 37.57 | 92 |
| 139.69 | 35.68 | 78 |
| 103.82 | 1.35 | 64 |
| 77.21 | 28.61 | 58 |
| 2.35 | 48.86 | 73 |
| -74 | 40.71 | 88 |
| -122.42 | 37.77 | 69 |
| 151.21 | -33.87 | 51 |
Browser API
const data = [
{
"latitude": 37.57,
"latitude2": 35.68,
"longitude": 126.98,
"longitude2": 139.69,
"name": "Seoul",
"value": 92
},
{
"latitude": 35.68,
"latitude2": 1.35,
"longitude": 139.69,
"longitude2": 103.82,
"name": "Tokyo",
"value": 78
},
{
"latitude": 1.35,
"latitude2": 28.61,
"longitude": 103.82,
"longitude2": 77.21,
"name": "Singapore",
"value": 64
},
{
"latitude": 28.61,
"latitude2": 48.86,
"longitude": 77.21,
"longitude2": 2.35,
"name": "Delhi",
"value": 58
},
{
"latitude": 48.86,
"latitude2": 40.71,
"longitude": 2.35,
"longitude2": -74,
"name": "Paris",
"value": 73
},
{
"latitude": 40.71,
"latitude2": 37.77,
"longitude": -74,
"longitude2": -122.42,
"name": "New York",
"value": 88
},
{
"latitude": 37.77,
"latitude2": 19.43,
"longitude": -122.42,
"longitude2": -99.13,
"name": "San Francisco",
"value": 69
},
{
"latitude": -33.87,
"latitude2": 37.57,
"longitude": 151.21,
"longitude2": 126.98,
"name": "Sydney",
"value": 51
}
];
const options = {
"axes": {
"x": false,
"y": false
},
"height": 620,
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"title": {
"subtitle": "Map uses runnable data and options to demonstrate point/region/choropleth/route/heat halo; flat geodesics.",
"text": "Map"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
};
Graflume.map('#chart', data, options);Portable schema
{
"axes": {
"x": false,
"y": false
},
"height": 620,
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"title": {
"subtitle": "Map uses runnable data and options to demonstrate point/region/choropleth/route/heat halo; flat geodesics.",
"text": "Map"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
}Reveal exact values from a mark or axis position. Authors can choose locale-aware date/time styles and a time zone with declarative options.
StatusLoading
tooltipLoading
Row data and zero-copy TypedArray columns share one data contract.
longitudequantitative | latitudequantitative | valuequantitative |
|---|---|---|
| 126.98 | 37.57 | 92 |
| 139.69 | 35.68 | 78 |
| 103.82 | 1.35 | 64 |
| 77.21 | 28.61 | 58 |
| 2.35 | 48.86 | 73 |
| -74 | 40.71 | 88 |
| -122.42 | 37.77 | 69 |
| 151.21 | -33.87 | 51 |
Browser API
const data = [
{
"latitude": 37.57,
"latitude2": 35.68,
"longitude": 126.98,
"longitude2": 139.69,
"name": "Seoul",
"value": 92
},
{
"latitude": 35.68,
"latitude2": 1.35,
"longitude": 139.69,
"longitude2": 103.82,
"name": "Tokyo",
"value": 78
},
{
"latitude": 1.35,
"latitude2": 28.61,
"longitude": 103.82,
"longitude2": 77.21,
"name": "Singapore",
"value": 64
},
{
"latitude": 28.61,
"latitude2": 48.86,
"longitude": 77.21,
"longitude2": 2.35,
"name": "Delhi",
"value": 58
},
{
"latitude": 48.86,
"latitude2": 40.71,
"longitude": 2.35,
"longitude2": -74,
"name": "Paris",
"value": 73
},
{
"latitude": 40.71,
"latitude2": 37.77,
"longitude": -74,
"longitude2": -122.42,
"name": "New York",
"value": 88
},
{
"latitude": 37.77,
"latitude2": 19.43,
"longitude": -122.42,
"longitude2": -99.13,
"name": "San Francisco",
"value": 69
},
{
"latitude": -33.87,
"latitude2": 37.57,
"longitude": 151.21,
"longitude2": 126.98,
"name": "Sydney",
"value": 51
}
];
const options = {
"axes": {
"x": false,
"y": false
},
"height": 620,
"interaction": {
"hover": true,
"tooltip": {
"fields": [
{
"field": "longitude",
"format": "number",
"label": "Longitude"
},
{
"field": "latitude",
"format": "number",
"label": "Latitude"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Tooltip",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
};
Graflume.map('#chart', data, options);Portable schema
{
"axes": {
"x": false,
"y": false
},
"height": 620,
"interaction": {
"hover": true,
"tooltip": {
"fields": [
{
"field": "longitude",
"format": "number",
"label": "Longitude"
},
{
"field": "latitude",
"format": "number",
"label": "Latitude"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Tooltip",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
}Apply the current built-in theme from the selector and update every active example together.
StatusLoading
themeLoading
Row data and zero-copy TypedArray columns share one data contract.
longitudequantitative | latitudequantitative | valuequantitative |
|---|---|---|
| 126.98 | 37.57 | 92 |
| 139.69 | 35.68 | 78 |
| 103.82 | 1.35 | 64 |
| 77.21 | 28.61 | 58 |
| 2.35 | 48.86 | 73 |
| -74 | 40.71 | 88 |
| -122.42 | 37.77 | 69 |
| 151.21 | -33.87 | 51 |
Browser API
const data = [
{
"latitude": 37.57,
"latitude2": 35.68,
"longitude": 126.98,
"longitude2": 139.69,
"name": "Seoul",
"value": 92
},
{
"latitude": 35.68,
"latitude2": 1.35,
"longitude": 139.69,
"longitude2": 103.82,
"name": "Tokyo",
"value": 78
},
{
"latitude": 1.35,
"latitude2": 28.61,
"longitude": 103.82,
"longitude2": 77.21,
"name": "Singapore",
"value": 64
},
{
"latitude": 28.61,
"latitude2": 48.86,
"longitude": 77.21,
"longitude2": 2.35,
"name": "Delhi",
"value": 58
},
{
"latitude": 48.86,
"latitude2": 40.71,
"longitude": 2.35,
"longitude2": -74,
"name": "Paris",
"value": 73
},
{
"latitude": 40.71,
"latitude2": 37.77,
"longitude": -74,
"longitude2": -122.42,
"name": "New York",
"value": 88
},
{
"latitude": 37.77,
"latitude2": 19.43,
"longitude": -122.42,
"longitude2": -99.13,
"name": "San Francisco",
"value": 69
},
{
"latitude": -33.87,
"latitude2": 37.57,
"longitude": 151.21,
"longitude2": 126.98,
"name": "Sydney",
"value": 51
}
];
const options = {
"axes": {
"x": false,
"y": false
},
"height": 620,
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"theme": "graflume-light",
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
};
Graflume.map('#chart', data, options);Portable schema
{
"axes": {
"x": false,
"y": false
},
"height": 620,
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"theme": "graflume-light",
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
}Explain the visual meaning of layers, categories, or continuous values.
StatusLoading
legendlegend · explicit · 1 channelsLoading
Row data and zero-copy TypedArray columns share one data contract.
longitudequantitative | latitudequantitative | valuequantitative |
|---|---|---|
| 126.98 | 37.57 | 92 |
| 139.69 | 35.68 | 78 |
| 103.82 | 1.35 | 64 |
| 77.21 | 28.61 | 58 |
| 2.35 | 48.86 | 73 |
| -74 | 40.71 | 88 |
| -122.42 | 37.77 | 69 |
| 151.21 | -33.87 | 51 |
Browser API
const data = [
{
"latitude": 37.57,
"latitude2": 35.68,
"longitude": 126.98,
"longitude2": 139.69,
"name": "Seoul",
"value": 92
},
{
"latitude": 35.68,
"latitude2": 1.35,
"longitude": 139.69,
"longitude2": 103.82,
"name": "Tokyo",
"value": 78
},
{
"latitude": 1.35,
"latitude2": 28.61,
"longitude": 103.82,
"longitude2": 77.21,
"name": "Singapore",
"value": 64
},
{
"latitude": 28.61,
"latitude2": 48.86,
"longitude": 77.21,
"longitude2": 2.35,
"name": "Delhi",
"value": 58
},
{
"latitude": 48.86,
"latitude2": 40.71,
"longitude": 2.35,
"longitude2": -74,
"name": "Paris",
"value": 73
},
{
"latitude": 40.71,
"latitude2": 37.77,
"longitude": -74,
"longitude2": -122.42,
"name": "New York",
"value": 88
},
{
"latitude": 37.77,
"latitude2": 19.43,
"longitude": -122.42,
"longitude2": -99.13,
"name": "San Francisco",
"value": 69
},
{
"latitude": -33.87,
"latitude2": 37.57,
"longitude": 151.21,
"longitude2": 126.98,
"name": "Sydney",
"value": 51
}
];
const options = {
"axes": {
"x": false,
"y": false
},
"height": 620,
"legend": {
"interactive": false,
"items": [
{
"id": "semantic-0",
"label": "Activity · size"
}
],
"labels": {
"hide": "Hide",
"show": "Show"
},
"maxItems": 8,
"mode": "layers",
"orientation": "horizontal",
"position": "bottom",
"title": "Map · Legend",
"visible": true
},
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
};
Graflume.map('#chart', data, options);Portable schema
{
"axes": {
"x": false,
"y": false
},
"height": 620,
"legend": {
"interactive": false,
"items": [
{
"id": "semantic-0",
"label": "Activity · size"
}
],
"labels": {
"hide": "Hide",
"show": "Show"
},
"maxItems": 8,
"mode": "layers",
"orientation": "horizontal",
"position": "bottom",
"title": "Map · Legend",
"visible": true
},
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
}Emphasize a representative datum or spatial position to guide inspection.
StatusLoading
highlighthighlights[] · datum · longitudeLoading
Row data and zero-copy TypedArray columns share one data contract.
longitudequantitative | latitudequantitative | valuequantitative |
|---|---|---|
| 126.98 | 37.57 | 92 |
| 139.69 | 35.68 | 78 |
| 103.82 | 1.35 | 64 |
| 77.21 | 28.61 | 58 |
| 2.35 | 48.86 | 73 |
| -74 | 40.71 | 88 |
| -122.42 | 37.77 | 69 |
| 151.21 | -33.87 | 51 |
Browser API
const data = [
{
"latitude": 37.57,
"latitude2": 35.68,
"longitude": 126.98,
"longitude2": 139.69,
"name": "Seoul",
"value": 92
},
{
"latitude": 35.68,
"latitude2": 1.35,
"longitude": 139.69,
"longitude2": 103.82,
"name": "Tokyo",
"value": 78
},
{
"latitude": 1.35,
"latitude2": 28.61,
"longitude": 103.82,
"longitude2": 77.21,
"name": "Singapore",
"value": 64
},
{
"latitude": 28.61,
"latitude2": 48.86,
"longitude": 77.21,
"longitude2": 2.35,
"name": "Delhi",
"value": 58
},
{
"latitude": 48.86,
"latitude2": 40.71,
"longitude": 2.35,
"longitude2": -74,
"name": "Paris",
"value": 73
},
{
"latitude": 40.71,
"latitude2": 37.77,
"longitude": -74,
"longitude2": -122.42,
"name": "New York",
"value": 88
},
{
"latitude": 37.77,
"latitude2": 19.43,
"longitude": -122.42,
"longitude2": -99.13,
"name": "San Francisco",
"value": 69
},
{
"latitude": -33.87,
"latitude2": 37.57,
"longitude": 151.21,
"longitude2": 126.98,
"name": "Sydney",
"value": 51
}
];
const options = {
"axes": {
"x": false,
"y": false
},
"height": 620,
"highlights": [
{
"id": "manual-focus",
"padding": 7,
"target": {
"field": "longitude",
"type": "datum",
"value": 2.35
}
}
],
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
};
Graflume.map('#chart', data, options);Portable schema
{
"axes": {
"x": false,
"y": false
},
"height": 620,
"highlights": [
{
"id": "manual-focus",
"padding": 7,
"target": {
"field": "longitude",
"type": "datum",
"value": 2.35
}
}
],
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
}Show an explanatory callout with automatic collision avoidance and multilingual wrapping.
StatusLoading
calloutannotations[] · datum · longitude · callout · placement:autoLoading
Row data and zero-copy TypedArray columns share one data contract.
longitudequantitative | latitudequantitative | valuequantitative |
|---|---|---|
| 126.98 | 37.57 | 92 |
| 139.69 | 35.68 | 78 |
| 103.82 | 1.35 | 64 |
| 77.21 | 28.61 | 58 |
| 2.35 | 48.86 | 73 |
| -74 | 40.71 | 88 |
| -122.42 | 37.77 | 69 |
| 151.21 | -33.87 | 51 |
Browser API
const data = [
{
"latitude": 37.57,
"latitude2": 35.68,
"longitude": 126.98,
"longitude2": 139.69,
"name": "Seoul",
"value": 92
},
{
"latitude": 35.68,
"latitude2": 1.35,
"longitude": 139.69,
"longitude2": 103.82,
"name": "Tokyo",
"value": 78
},
{
"latitude": 1.35,
"latitude2": 28.61,
"longitude": 103.82,
"longitude2": 77.21,
"name": "Singapore",
"value": 64
},
{
"latitude": 28.61,
"latitude2": 48.86,
"longitude": 77.21,
"longitude2": 2.35,
"name": "Delhi",
"value": 58
},
{
"latitude": 48.86,
"latitude2": 40.71,
"longitude": 2.35,
"longitude2": -74,
"name": "Paris",
"value": 73
},
{
"latitude": 40.71,
"latitude2": 37.77,
"longitude": -74,
"longitude2": -122.42,
"name": "New York",
"value": 88
},
{
"latitude": 37.77,
"latitude2": 19.43,
"longitude": -122.42,
"longitude2": -99.13,
"name": "San Francisco",
"value": 69
},
{
"latitude": -33.87,
"latitude2": 37.57,
"longitude": 151.21,
"longitude2": 126.98,
"name": "Sydney",
"value": 51
}
];
const options = {
"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": "longitude",
"type": "datum",
"value": 2.35
},
"text": "Point and range highlights · 2.35"
}
],
"axes": {
"x": false,
"y": false
},
"height": 620,
"interaction": {
"controls": {
"annotations": 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"
}
}
},
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
};
Graflume.map('#chart', data, options);Portable schema
{
"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": "longitude",
"type": "datum",
"value": 2.35
},
"text": "Point and range highlights · 2.35"
}
],
"axes": {
"x": false,
"y": false
},
"height": 620,
"interaction": {
"controls": {
"annotations": 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"
}
}
},
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
}Select and toggle data, then clear it from the background or Escape key.
StatusLoading
selectionselection · multiple · toggleLoading
Row data and zero-copy TypedArray columns share one data contract.
longitudequantitative | latitudequantitative | valuequantitative |
|---|---|---|
| 126.98 | 37.57 | 92 |
| 139.69 | 35.68 | 78 |
| 103.82 | 1.35 | 64 |
| 77.21 | 28.61 | 58 |
| 2.35 | 48.86 | 73 |
| -74 | 40.71 | 88 |
| -122.42 | 37.77 | 69 |
| 151.21 | -33.87 | 51 |
Browser API
const data = [
{
"latitude": 37.57,
"latitude2": 35.68,
"longitude": 126.98,
"longitude2": 139.69,
"name": "Seoul",
"value": 92
},
{
"latitude": 35.68,
"latitude2": 1.35,
"longitude": 139.69,
"longitude2": 103.82,
"name": "Tokyo",
"value": 78
},
{
"latitude": 1.35,
"latitude2": 28.61,
"longitude": 103.82,
"longitude2": 77.21,
"name": "Singapore",
"value": 64
},
{
"latitude": 28.61,
"latitude2": 48.86,
"longitude": 77.21,
"longitude2": 2.35,
"name": "Delhi",
"value": 58
},
{
"latitude": 48.86,
"latitude2": 40.71,
"longitude": 2.35,
"longitude2": -74,
"name": "Paris",
"value": 73
},
{
"latitude": 40.71,
"latitude2": 37.77,
"longitude": -74,
"longitude2": -122.42,
"name": "New York",
"value": 88
},
{
"latitude": 37.77,
"latitude2": 19.43,
"longitude": -122.42,
"longitude2": -99.13,
"name": "San Francisco",
"value": 69
},
{
"latitude": -33.87,
"latitude2": 37.57,
"longitude": 151.21,
"longitude2": 126.98,
"name": "Sydney",
"value": 51
}
];
const options = {
"axes": {
"x": false,
"y": false
},
"height": 620,
"interaction": {
"selection": {
"ariaLabel": "Interactive selection",
"clearOnBackground": true,
"clearOnEscape": true,
"highlight": {
"padding": 5
},
"key": "longitude",
"mode": "multiple",
"toggle": true
}
},
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
};
Graflume.map('#chart', data, options);Portable schema
{
"axes": {
"x": false,
"y": false
},
"height": 620,
"interaction": {
"selection": {
"ariaLabel": "Interactive selection",
"clearOnBackground": true,
"clearOnEscape": true,
"highlight": {
"padding": 5
},
"key": "longitude",
"mode": "multiple",
"toggle": true
}
},
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
}Show or hide zoom, pan, reset, projection, fullscreen, and PNG export one menu at a time. Set controls: false to remove the entire toolbar.
StatusLoading
controlsLoading
Row data and zero-copy TypedArray columns share one data contract.
longitudequantitative | latitudequantitative | valuequantitative |
|---|---|---|
| 126.98 | 37.57 | 92 |
| 139.69 | 35.68 | 78 |
| 103.82 | 1.35 | 64 |
| 77.21 | 28.61 | 58 |
| 2.35 | 48.86 | 73 |
| -74 | 40.71 | 88 |
| -122.42 | 37.77 | 69 |
| 151.21 | -33.87 | 51 |
Browser API
const data = [
{
"latitude": 37.57,
"latitude2": 35.68,
"longitude": 126.98,
"longitude2": 139.69,
"name": "Seoul",
"value": 92
},
{
"latitude": 35.68,
"latitude2": 1.35,
"longitude": 139.69,
"longitude2": 103.82,
"name": "Tokyo",
"value": 78
},
{
"latitude": 1.35,
"latitude2": 28.61,
"longitude": 103.82,
"longitude2": 77.21,
"name": "Singapore",
"value": 64
},
{
"latitude": 28.61,
"latitude2": 48.86,
"longitude": 77.21,
"longitude2": 2.35,
"name": "Delhi",
"value": 58
},
{
"latitude": 48.86,
"latitude2": 40.71,
"longitude": 2.35,
"longitude2": -74,
"name": "Paris",
"value": 73
},
{
"latitude": 40.71,
"latitude2": 37.77,
"longitude": -74,
"longitude2": -122.42,
"name": "New York",
"value": 88
},
{
"latitude": 37.77,
"latitude2": 19.43,
"longitude": -122.42,
"longitude2": -99.13,
"name": "San Francisco",
"value": 69
},
{
"latitude": -33.87,
"latitude2": 37.57,
"longitude": 151.21,
"longitude2": 126.98,
"name": "Sydney",
"value": 51
}
];
const options = {
"axes": {
"x": false,
"y": false
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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
},
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
}
},
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"padding": {
"top": 52
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
};
Graflume.map('#chart', data, options);Portable schema
{
"axes": {
"x": false,
"y": false
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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
},
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
}
},
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"padding": {
"top": 52
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
}Pair ARIA descriptions and keyboard guidance with a semantic data table.
StatusLoading
accessibilityLoading
Row data and zero-copy TypedArray columns share one data contract.
longitudequantitative | latitudequantitative | valuequantitative |
|---|---|---|
| 126.98 | 37.57 | 92 |
| 139.69 | 35.68 | 78 |
| 103.82 | 1.35 | 64 |
| 77.21 | 28.61 | 58 |
| 2.35 | 48.86 | 73 |
| -74 | 40.71 | 88 |
| -122.42 | 37.77 | 69 |
| 151.21 | -33.87 | 51 |
Browser API
const data = [
{
"latitude": 37.57,
"latitude2": 35.68,
"longitude": 126.98,
"longitude2": 139.69,
"name": "Seoul",
"value": 92
},
{
"latitude": 35.68,
"latitude2": 1.35,
"longitude": 139.69,
"longitude2": 103.82,
"name": "Tokyo",
"value": 78
},
{
"latitude": 1.35,
"latitude2": 28.61,
"longitude": 103.82,
"longitude2": 77.21,
"name": "Singapore",
"value": 64
},
{
"latitude": 28.61,
"latitude2": 48.86,
"longitude": 77.21,
"longitude2": 2.35,
"name": "Delhi",
"value": 58
},
{
"latitude": 48.86,
"latitude2": 40.71,
"longitude": 2.35,
"longitude2": -74,
"name": "Paris",
"value": 73
},
{
"latitude": 40.71,
"latitude2": 37.77,
"longitude": -74,
"longitude2": -122.42,
"name": "New York",
"value": 88
},
{
"latitude": 37.77,
"latitude2": 19.43,
"longitude": -122.42,
"longitude2": -99.13,
"name": "San Francisco",
"value": 69
},
{
"latitude": -33.87,
"latitude2": 37.57,
"longitude": 151.21,
"longitude2": 126.98,
"name": "Sydney",
"value": 51
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Accessibility example"
},
"axes": {
"x": false,
"y": false
},
"height": 620,
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
};
Graflume.map('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Accessibility example"
},
"axes": {
"x": false,
"y": false
},
"height": 620,
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
}Chart-specific features
Run the existing Map modes plus focused tabs for one or many countries, principal regions, mixed country/region scopes, the detailed world catalog, and automatic fit, detail, and labels.
Geographic region chart uses runnable data and options to demonstrate embedded Natural Earth basemap; general fit and clip policy.
StatusLoading
geoembedded Natural Earth basemapgeneral fit and clip policyLoading
Row data and zero-copy TypedArray columns share one data contract.
regionordinal | valuequantitative |
|---|---|
| KR | 92 |
| JPN | 84 |
| SGP | 79 |
| USA | 88 |
| BRA | 63 |
| FRA | 76 |
| ZAF | 58 |
| AUS | 72 |
Browser API
const data = [
{
"region": "KR",
"value": 92
},
{
"region": "JPN",
"value": 84
},
{
"region": "SGP",
"value": 79
},
{
"region": "USA",
"value": 88
},
{
"region": "BRA",
"value": 63
},
{
"region": "FRA",
"value": 76
},
{
"region": "ZAF",
"value": 58
},
{
"region": "AUS",
"value": 72
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "region",
"format": "auto",
"label": "Region"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"mode": "choropleth"
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Geographic region chart uses runnable data and options to demonstrate embedded Natural Earth basemap; general fit and clip policy.",
"text": "Map"
},
"width": "container",
"x": {
"field": "region",
"title": "Longitude",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Latitude",
"type": "quantitative"
}
};
Graflume.geo('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "region",
"format": "auto",
"label": "Region"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"mode": "choropleth"
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Geographic region chart uses runnable data and options to demonstrate embedded Natural Earth basemap; general fit and clip policy.",
"text": "Map"
},
"width": "container",
"x": {
"field": "region",
"title": "Longitude",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Latitude",
"type": "quantitative"
}
}Map uses runnable data and options to demonstrate point/region/choropleth/route/heat halo; flat geodesics.
StatusLoading
mappoint/region/choropleth/route/heat haloflat geodesicsLoading
Row data and zero-copy TypedArray columns share one data contract.
longitudequantitative | latitudequantitative | valuequantitative |
|---|---|---|
| 126.98 | 37.57 | 92 |
| 139.69 | 35.68 | 78 |
| 103.82 | 1.35 | 64 |
| 77.21 | 28.61 | 58 |
| 2.35 | 48.86 | 73 |
| -74 | 40.71 | 88 |
| -122.42 | 37.77 | 69 |
| 151.21 | -33.87 | 51 |
Browser API
const data = [
{
"latitude": 37.57,
"latitude2": 35.68,
"longitude": 126.98,
"longitude2": 139.69,
"name": "Seoul",
"value": 92
},
{
"latitude": 35.68,
"latitude2": 1.35,
"longitude": 139.69,
"longitude2": 103.82,
"name": "Tokyo",
"value": 78
},
{
"latitude": 1.35,
"latitude2": 28.61,
"longitude": 103.82,
"longitude2": 77.21,
"name": "Singapore",
"value": 64
},
{
"latitude": 28.61,
"latitude2": 48.86,
"longitude": 77.21,
"longitude2": 2.35,
"name": "Delhi",
"value": 58
},
{
"latitude": 48.86,
"latitude2": 40.71,
"longitude": 2.35,
"longitude2": -74,
"name": "Paris",
"value": 73
},
{
"latitude": 40.71,
"latitude2": 37.77,
"longitude": -74,
"longitude2": -122.42,
"name": "New York",
"value": 88
},
{
"latitude": 37.77,
"latitude2": 19.43,
"longitude": -122.42,
"longitude2": -99.13,
"name": "San Francisco",
"value": 69
},
{
"latitude": -33.87,
"latitude2": 37.57,
"longitude": 151.21,
"longitude2": 126.98,
"name": "Sydney",
"value": 51
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "longitude",
"format": "number",
"label": "Longitude"
},
{
"field": "latitude",
"format": "number",
"label": "Latitude"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Map uses runnable data and options to demonstrate point/region/choropleth/route/heat halo; flat geodesics.",
"text": "Map"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
};
Graflume.map('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "longitude",
"format": "number",
"label": "Longitude"
},
{
"field": "latitude",
"format": "number",
"label": "Latitude"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Map uses runnable data and options to demonstrate point/region/choropleth/route/heat halo; flat geodesics.",
"text": "Map"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
}Flow map uses runnable data and options to demonstrate optional graticule; provider-backed tile lifecycle, cache and attribution.
StatusLoading
flow-mapoptional graticuleprovider-backed tile lifecycle, cache and attributionLoading
Row data and zero-copy TypedArray columns share one data contract.
longitudequantitative | latitudequantitative | longitude2quantitative | latitude2quantitative | valuequantitative |
|---|---|---|---|---|
| 126.98 | 37.57 | 139.69 | 35.68 | 92 |
| 139.69 | 35.68 | 103.82 | 1.35 | 78 |
| 103.82 | 1.35 | 77.21 | 28.61 | 64 |
| 77.21 | 28.61 | 2.35 | 48.86 | 58 |
| 2.35 | 48.86 | -74 | 40.71 | 73 |
| -74 | 40.71 | -122.42 | 37.77 | 88 |
| -122.42 | 37.77 | -99.13 | 19.43 | 69 |
| 151.21 | -33.87 | 126.98 | 37.57 | 51 |
Browser API
const data = [
{
"latitude": 37.57,
"latitude2": 35.68,
"longitude": 126.98,
"longitude2": 139.69,
"name": "Seoul",
"value": 92
},
{
"latitude": 35.68,
"latitude2": 1.35,
"longitude": 139.69,
"longitude2": 103.82,
"name": "Tokyo",
"value": 78
},
{
"latitude": 1.35,
"latitude2": 28.61,
"longitude": 103.82,
"longitude2": 77.21,
"name": "Singapore",
"value": 64
},
{
"latitude": 28.61,
"latitude2": 48.86,
"longitude": 77.21,
"longitude2": 2.35,
"name": "Delhi",
"value": 58
},
{
"latitude": 48.86,
"latitude2": 40.71,
"longitude": 2.35,
"longitude2": -74,
"name": "Paris",
"value": 73
},
{
"latitude": 40.71,
"latitude2": 37.77,
"longitude": -74,
"longitude2": -122.42,
"name": "New York",
"value": 88
},
{
"latitude": 37.77,
"latitude2": 19.43,
"longitude": -122.42,
"longitude2": -99.13,
"name": "San Francisco",
"value": 69
},
{
"latitude": -33.87,
"latitude2": 37.57,
"longitude": 151.21,
"longitude2": 126.98,
"name": "Sydney",
"value": 51
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Flow map example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "longitude",
"format": "number",
"label": "Longitude"
},
{
"field": "latitude",
"format": "number",
"label": "Latitude"
},
{
"field": "longitude2",
"format": "number",
"label": "Longitude2"
},
{
"field": "latitude2",
"format": "number",
"label": "Latitude2"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Flow map",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"latitude2": "latitude2",
"longitude2": "longitude2",
"value": "value"
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Flow map uses runnable data and options to demonstrate optional graticule; provider-backed tile lifecycle, cache and attribution.",
"text": "Map · Flow map"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
};
Graflume.flowMap('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Flow map example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "longitude",
"format": "number",
"label": "Longitude"
},
{
"field": "latitude",
"format": "number",
"label": "Latitude"
},
{
"field": "longitude2",
"format": "number",
"label": "Longitude2"
},
{
"field": "latitude2",
"format": "number",
"label": "Latitude2"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Flow map",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"latitude2": "latitude2",
"longitude2": "longitude2",
"value": "value"
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Flow map uses runnable data and options to demonstrate optional graticule; provider-backed tile lifecycle, cache and attribution.",
"text": "Map · Flow map"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
}Geographic heatmap uses runnable data and options to demonstrate bounded equirectangular viewport and coordinate validation; country, subdivision, and arbitrary-feature multi-selection.
StatusLoading
geo-heatmapbounded equirectangular viewport and coordinate validationcountry, subdivision, and arbitrary-feature multi-selectionLoading
Row data and zero-copy TypedArray columns share one data contract.
longitudequantitative | latitudequantitative | valuequantitative |
|---|---|---|
| 126.98 | 37.57 | 92 |
| 139.69 | 35.68 | 78 |
| 103.82 | 1.35 | 64 |
| 77.21 | 28.61 | 58 |
| 2.35 | 48.86 | 73 |
| -74 | 40.71 | 88 |
| -122.42 | 37.77 | 69 |
| 151.21 | -33.87 | 51 |
Browser API
const data = [
{
"latitude": 37.57,
"latitude2": 35.68,
"longitude": 126.98,
"longitude2": 139.69,
"name": "Seoul",
"value": 92
},
{
"latitude": 35.68,
"latitude2": 1.35,
"longitude": 139.69,
"longitude2": 103.82,
"name": "Tokyo",
"value": 78
},
{
"latitude": 1.35,
"latitude2": 28.61,
"longitude": 103.82,
"longitude2": 77.21,
"name": "Singapore",
"value": 64
},
{
"latitude": 28.61,
"latitude2": 48.86,
"longitude": 77.21,
"longitude2": 2.35,
"name": "Delhi",
"value": 58
},
{
"latitude": 48.86,
"latitude2": 40.71,
"longitude": 2.35,
"longitude2": -74,
"name": "Paris",
"value": 73
},
{
"latitude": 40.71,
"latitude2": 37.77,
"longitude": -74,
"longitude2": -122.42,
"name": "New York",
"value": 88
},
{
"latitude": 37.77,
"latitude2": 19.43,
"longitude": -122.42,
"longitude2": -99.13,
"name": "San Francisco",
"value": 69
},
{
"latitude": -33.87,
"latitude2": 37.57,
"longitude": 151.21,
"longitude2": 126.98,
"name": "Sydney",
"value": 51
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Geographic heatmap example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "longitude",
"format": "number",
"label": "Longitude"
},
{
"field": "latitude",
"format": "number",
"label": "Latitude"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Geographic heatmap",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"value": "value"
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Geographic heatmap uses runnable data and options to demonstrate bounded equirectangular viewport and coordinate validation; country, subdivision, and arbitrary-feature multi-selection.",
"text": "Map · Geographic heatmap"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
};
Graflume.geoHeatmap('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Geographic heatmap example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "longitude",
"format": "number",
"label": "Longitude"
},
{
"field": "latitude",
"format": "number",
"label": "Latitude"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Geographic heatmap",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"value": "value"
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Geographic heatmap uses runnable data and options to demonstrate bounded equirectangular viewport and coordinate validation; country, subdivision, and arbitrary-feature multi-selection.",
"text": "Map · Geographic heatmap"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
}Map bubble chart uses runnable data and options to demonstrate embedded Natural Earth attribution toggle; selection-aware automatic bounds and overlay clipping.
StatusLoading
map-bubbleembedded Natural Earth attribution toggleselection-aware automatic bounds and overlay clippingLoading
Row data and zero-copy TypedArray columns share one data contract.
longitudequantitative | latitudequantitative | valuequantitative |
|---|---|---|
| 126.98 | 37.57 | 92 |
| 139.69 | 35.68 | 78 |
| 103.82 | 1.35 | 64 |
| 77.21 | 28.61 | 58 |
| 2.35 | 48.86 | 73 |
| -74 | 40.71 | 88 |
| -122.42 | 37.77 | 69 |
| 151.21 | -33.87 | 51 |
Browser API
const data = [
{
"latitude": 37.57,
"latitude2": 35.68,
"longitude": 126.98,
"longitude2": 139.69,
"name": "Seoul",
"value": 92
},
{
"latitude": 35.68,
"latitude2": 1.35,
"longitude": 139.69,
"longitude2": 103.82,
"name": "Tokyo",
"value": 78
},
{
"latitude": 1.35,
"latitude2": 28.61,
"longitude": 103.82,
"longitude2": 77.21,
"name": "Singapore",
"value": 64
},
{
"latitude": 28.61,
"latitude2": 48.86,
"longitude": 77.21,
"longitude2": 2.35,
"name": "Delhi",
"value": 58
},
{
"latitude": 48.86,
"latitude2": 40.71,
"longitude": 2.35,
"longitude2": -74,
"name": "Paris",
"value": 73
},
{
"latitude": 40.71,
"latitude2": 37.77,
"longitude": -74,
"longitude2": -122.42,
"name": "New York",
"value": 88
},
{
"latitude": 37.77,
"latitude2": 19.43,
"longitude": -122.42,
"longitude2": -99.13,
"name": "San Francisco",
"value": 69
},
{
"latitude": -33.87,
"latitude2": 37.57,
"longitude": 151.21,
"longitude2": 126.98,
"name": "Sydney",
"value": 51
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Map bubble chart example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "longitude",
"format": "number",
"label": "Longitude"
},
{
"field": "latitude",
"format": "number",
"label": "Latitude"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Map bubble chart",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Map bubble chart uses runnable data and options to demonstrate embedded Natural Earth attribution toggle; selection-aware automatic bounds and overlay clipping.",
"text": "Map · Map bubble chart"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
};
Graflume.mapBubble('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Map bubble chart example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "longitude",
"format": "number",
"label": "Longitude"
},
{
"field": "latitude",
"format": "number",
"label": "Latitude"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Map bubble chart",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Map bubble chart uses runnable data and options to demonstrate embedded Natural Earth attribution toggle; selection-aware automatic bounds and overlay clipping.",
"text": "Map · Map bubble chart"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
}Map line chart uses runnable data and options to demonstrate globe great-circle routes; versioned lazy boundary packs with byte-length and SHA-256 verification.
StatusLoading
map-lineglobe great-circle routesversioned lazy boundary packs with byte-length and SHA-256 verificationLoading
Row data and zero-copy TypedArray columns share one data contract.
longitudequantitative | latitudequantitative | longitude2quantitative | latitude2quantitative | valuequantitative |
|---|---|---|---|---|
| 126.98 | 37.57 | 139.69 | 35.68 | 92 |
| 139.69 | 35.68 | 103.82 | 1.35 | 78 |
| 103.82 | 1.35 | 77.21 | 28.61 | 64 |
| 77.21 | 28.61 | 2.35 | 48.86 | 58 |
| 2.35 | 48.86 | -74 | 40.71 | 73 |
| -74 | 40.71 | -122.42 | 37.77 | 88 |
| -122.42 | 37.77 | -99.13 | 19.43 | 69 |
| 151.21 | -33.87 | 126.98 | 37.57 | 51 |
Browser API
const data = [
{
"latitude": 37.57,
"latitude2": 35.68,
"longitude": 126.98,
"longitude2": 139.69,
"name": "Seoul",
"value": 92
},
{
"latitude": 35.68,
"latitude2": 1.35,
"longitude": 139.69,
"longitude2": 103.82,
"name": "Tokyo",
"value": 78
},
{
"latitude": 1.35,
"latitude2": 28.61,
"longitude": 103.82,
"longitude2": 77.21,
"name": "Singapore",
"value": 64
},
{
"latitude": 28.61,
"latitude2": 48.86,
"longitude": 77.21,
"longitude2": 2.35,
"name": "Delhi",
"value": 58
},
{
"latitude": 48.86,
"latitude2": 40.71,
"longitude": 2.35,
"longitude2": -74,
"name": "Paris",
"value": 73
},
{
"latitude": 40.71,
"latitude2": 37.77,
"longitude": -74,
"longitude2": -122.42,
"name": "New York",
"value": 88
},
{
"latitude": 37.77,
"latitude2": 19.43,
"longitude": -122.42,
"longitude2": -99.13,
"name": "San Francisco",
"value": 69
},
{
"latitude": -33.87,
"latitude2": 37.57,
"longitude": 151.21,
"longitude2": 126.98,
"name": "Sydney",
"value": 51
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Map line chart example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "longitude",
"format": "number",
"label": "Longitude"
},
{
"field": "latitude",
"format": "number",
"label": "Latitude"
},
{
"field": "longitude2",
"format": "number",
"label": "Longitude2"
},
{
"field": "latitude2",
"format": "number",
"label": "Latitude2"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Map line chart",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"latitude2": "latitude2",
"longitude2": "longitude2",
"value": "value"
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Map line chart uses runnable data and options to demonstrate globe great-circle routes; versioned lazy boundary packs with byte-length and SHA-256 verification.",
"text": "Map · Map line chart"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
};
Graflume.mapLine('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Map line chart example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "longitude",
"format": "number",
"label": "Longitude"
},
{
"field": "latitude",
"format": "number",
"label": "Latitude"
},
{
"field": "longitude2",
"format": "number",
"label": "Longitude2"
},
{
"field": "latitude2",
"format": "number",
"label": "Latitude2"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Map line chart",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"latitude2": "latitude2",
"longitude2": "longitude2",
"value": "value"
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Map line chart uses runnable data and options to demonstrate globe great-circle routes; versioned lazy boundary packs with byte-length and SHA-256 verification.",
"text": "Map · Map line chart"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
}Map point chart uses runnable data and options to demonstrate back-face occlusion and orbit; bounded coordinate-detail preparation without feature or ring sampling.
StatusLoading
map-pointback-face occlusion and orbitbounded coordinate-detail preparation without feature or ring samplingLoading
Row data and zero-copy TypedArray columns share one data contract.
longitudequantitative | latitudequantitative | valuequantitative |
|---|---|---|
| 126.98 | 37.57 | 92 |
| 139.69 | 35.68 | 78 |
| 103.82 | 1.35 | 64 |
| 77.21 | 28.61 | 58 |
| 2.35 | 48.86 | 73 |
| -74 | 40.71 | 88 |
| -122.42 | 37.77 | 69 |
| 151.21 | -33.87 | 51 |
Browser API
const data = [
{
"latitude": 37.57,
"latitude2": 35.68,
"longitude": 126.98,
"longitude2": 139.69,
"name": "Seoul",
"value": 92
},
{
"latitude": 35.68,
"latitude2": 1.35,
"longitude": 139.69,
"longitude2": 103.82,
"name": "Tokyo",
"value": 78
},
{
"latitude": 1.35,
"latitude2": 28.61,
"longitude": 103.82,
"longitude2": 77.21,
"name": "Singapore",
"value": 64
},
{
"latitude": 28.61,
"latitude2": 48.86,
"longitude": 77.21,
"longitude2": 2.35,
"name": "Delhi",
"value": 58
},
{
"latitude": 48.86,
"latitude2": 40.71,
"longitude": 2.35,
"longitude2": -74,
"name": "Paris",
"value": 73
},
{
"latitude": 40.71,
"latitude2": 37.77,
"longitude": -74,
"longitude2": -122.42,
"name": "New York",
"value": 88
},
{
"latitude": 37.77,
"latitude2": 19.43,
"longitude": -122.42,
"longitude2": -99.13,
"name": "San Francisco",
"value": 69
},
{
"latitude": -33.87,
"latitude2": 37.57,
"longitude": 151.21,
"longitude2": 126.98,
"name": "Sydney",
"value": 51
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Map point chart example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "longitude",
"format": "number",
"label": "Longitude"
},
{
"field": "latitude",
"format": "number",
"label": "Latitude"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Map point chart",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Map point chart uses runnable data and options to demonstrate back-face occlusion and orbit; bounded coordinate-detail preparation without feature or ring sampling.",
"text": "Map · Map point chart"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
};
Graflume.mapPoint('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Map point chart example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "longitude",
"format": "number",
"label": "Longitude"
},
{
"field": "latitude",
"format": "number",
"label": "Latitude"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Map point chart",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Map point chart uses runnable data and options to demonstrate back-face occlusion and orbit; bounded coordinate-detail preparation without feature or ring sampling.",
"text": "Map · Map point chart"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
}Tiled map uses runnable data and options to demonstrate source/layer/projection lifecycle; explicit feature-to-row joins and collision-aware geographic labels.
StatusLoading
tiled-mapsource/layer/projection lifecycleexplicit feature-to-row joins and collision-aware geographic labelsLoading
Row data and zero-copy TypedArray columns share one data contract.
longitudequantitative | latitudequantitative |
|---|---|
| 126.98 | 37.57 |
| 139.69 | 35.68 |
| 103.82 | 1.35 |
| 77.21 | 28.61 |
| 2.35 | 48.86 |
| -74 | 40.71 |
| -122.42 | 37.77 |
| 151.21 | -33.87 |
Browser API
const data = [
{
"latitude": 37.57,
"latitude2": 35.68,
"longitude": 126.98,
"longitude2": 139.69,
"name": "Seoul",
"value": 92
},
{
"latitude": 35.68,
"latitude2": 1.35,
"longitude": 139.69,
"longitude2": 103.82,
"name": "Tokyo",
"value": 78
},
{
"latitude": 1.35,
"latitude2": 28.61,
"longitude": 103.82,
"longitude2": 77.21,
"name": "Singapore",
"value": 64
},
{
"latitude": 28.61,
"latitude2": 48.86,
"longitude": 77.21,
"longitude2": 2.35,
"name": "Delhi",
"value": 58
},
{
"latitude": 48.86,
"latitude2": 40.71,
"longitude": 2.35,
"longitude2": -74,
"name": "Paris",
"value": 73
},
{
"latitude": 40.71,
"latitude2": 37.77,
"longitude": -74,
"longitude2": -122.42,
"name": "New York",
"value": 88
},
{
"latitude": 37.77,
"latitude2": 19.43,
"longitude": -122.42,
"longitude2": -99.13,
"name": "San Francisco",
"value": 69
},
{
"latitude": -33.87,
"latitude2": 37.57,
"longitude": 151.21,
"longitude2": 126.98,
"name": "Sydney",
"value": 51
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Tiled map example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "longitude",
"format": "number",
"label": "Longitude"
},
{
"field": "latitude",
"format": "number",
"label": "Latitude"
}
],
"title": "Map · Tiled map",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"graticule": true
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Tiled map uses runnable data and options to demonstrate source/layer/projection lifecycle; explicit feature-to-row joins and collision-aware geographic labels.",
"text": "Map · Tiled map"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
};
Graflume.tiledMap('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Tiled map example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "longitude",
"format": "number",
"label": "Longitude"
},
{
"field": "latitude",
"format": "number",
"label": "Latitude"
}
],
"title": "Map · Tiled map",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"graticule": true
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Tiled map uses runnable data and options to demonstrate source/layer/projection lifecycle; explicit feature-to-row joins and collision-aware geographic labels.",
"text": "Map · Tiled map"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
}Natural Earth land and borders on a sphere with optional points and routes. uses runnable data and options to demonstrate GeoJSON and TopoJSON.
StatusLoading
globeGeoJSON and TopoJSONLoading
Row data and zero-copy TypedArray columns share one data contract.
kindordinal | longitudequantitative | latitudequantitative | labelordinal | valuequantitative | sizequantitative | fromLongitudequantitative | fromLatitudequantitative | toLongitudequantitative | toLatitudequantitative |
|---|---|---|---|---|---|---|---|---|---|
| point | 126.978 | 37.5665 | Seoul | 96 | 10 | — | — | — | — |
| point | -74.006 | 40.7128 | New York | 88 | 9 | — | — | — | — |
| point | 151.2093 | -33.8688 | Sydney | 74 | 8 | — | — | — | — |
| point | 2.3522 | 48.8566 | Paris | 82 | 8 | — | — | — | — |
| point | 18.4241 | -33.9249 | Cape Town | 69 | 7 | — | — | — | — |
| point | -46.6333 | -23.5505 | São Paulo | 77 | 8 | — | — | — | — |
| route | — | — | Seoul–New York | — | — | 126.978 | 37.5665 | -74.006 | 40.7128 |
| route | — | — | Seoul–Sydney | — | — | 126.978 | 37.5665 | 151.2093 | -33.8688 |
| route | — | — | New York–Paris | — | — | -74.006 | 40.7128 | 2.3522 | 48.8566 |
| route | — | — | Paris–Cape Town | — | — | 2.3522 | 48.8566 | 18.4241 | -33.9249 |
| route | — | — | São Paulo–Cape Town | — | — | -46.6333 | -23.5505 | 18.4241 | -33.9249 |
Browser API
const data = {
"points": [
{
"label": "Seoul",
"latitude": 37.5665,
"longitude": 126.978,
"size": 10,
"value": 96
},
{
"label": "New York",
"latitude": 40.7128,
"longitude": -74.006,
"size": 9,
"value": 88
},
{
"label": "Sydney",
"latitude": -33.8688,
"longitude": 151.2093,
"size": 8,
"value": 74
},
{
"label": "Paris",
"latitude": 48.8566,
"longitude": 2.3522,
"size": 8,
"value": 82
},
{
"label": "Cape Town",
"latitude": -33.9249,
"longitude": 18.4241,
"size": 7,
"value": 69
},
{
"label": "São Paulo",
"latitude": -23.5505,
"longitude": -46.6333,
"size": 8,
"value": 77
}
],
"routes": [
{
"from": [
126.978,
37.5665
],
"label": "Seoul–New York",
"to": [
-74.006,
40.7128
]
},
{
"from": [
126.978,
37.5665
],
"label": "Seoul–Sydney",
"to": [
151.2093,
-33.8688
]
},
{
"from": [
-74.006,
40.7128
],
"label": "New York–Paris",
"to": [
2.3522,
48.8566
]
},
{
"from": [
2.3522,
48.8566
],
"label": "Paris–Cape Town",
"to": [
18.4241,
-33.9249
]
},
{
"from": [
-46.6333,
-23.5505
],
"label": "São Paulo–Cape Town",
"to": [
18.4241,
-33.9249
]
}
]
};
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"maxRows": 100,
"table": true
},
"ariaLabel": "Map · Natural Earth land and borders on a sphere with optional points and routes. · Chart family",
"basemap": "natural-earth",
"borderColor": "#d7e3d5",
"camera": {
"distance": 4.8,
"fov": 40,
"pitch": 0.38,
"yaw": 0.35
},
"create": {
"autoResize": true,
"height": 420
},
"graticule": false,
"id": "manual-map-globe",
"interaction": {
"controls": true,
"labels": {
"chart": "Map · Natural Earth land and borders on a sphere with optional points and routes. · Chart family",
"contextLost": "The WebGL context was lost. Try again to restore the chart.",
"exportPng": "Download PNG",
"fullscreen": "Enter fullscreen / Exit fullscreen",
"hideAnnotations": "Hide callouts",
"instructions": "Use Tab to reach a control and Enter or Space to activate it. With the chart focused, use plus and minus to zoom and arrow keys to pan.",
"orbit": "Chart controls · 3D ⟳",
"pan": "Chart controls · 3D ↔",
"projection": "Chart controls · 3D ◇",
"reset": "Reset view",
"showAnnotations": "Show callouts",
"toolbar": "Chart controls",
"unavailable": "WebGL is unavailable in this environment, so the 3D chart cannot be displayed.",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"orbit": true,
"pan": true,
"picking": true,
"tooltip": {
"fields": [
"kind",
"longitude",
"latitude",
"label",
"value",
"size",
"fromLongitude",
"fromLatitude",
"toLongitude",
"toLatitude"
],
"title": "Map · Natural Earth land and borders on a sphere with optional points and routes."
},
"wheel": "modifier",
"zoom": true
},
"landColor": "#79a78d",
"lighting": {
"ambient": 0.48,
"diffuse": 0.86,
"direction": [
-0.45,
0.82,
0.62
]
},
"oceanColor": "#0b2a4a",
"pointColor": "#fb7185",
"routeColor": "#fbbf24",
"theme": "graflume-light",
"title": "Map · Natural Earth land and borders on a sphere with optional points and routes."
};
GraflumeSpatial.globe('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"maxRows": 100,
"table": true
},
"ariaLabel": "Map · Natural Earth land and borders on a sphere with optional points and routes. · Chart family",
"basemap": "natural-earth",
"borderColor": "#d7e3d5",
"camera": {
"distance": 4.8,
"fov": 40,
"pitch": 0.38,
"yaw": 0.35
},
"create": {
"autoResize": true,
"height": 420
},
"graticule": false,
"id": "manual-map-globe",
"interaction": {
"controls": true,
"labels": {
"chart": "Map · Natural Earth land and borders on a sphere with optional points and routes. · Chart family",
"contextLost": "The WebGL context was lost. Try again to restore the chart.",
"exportPng": "Download PNG",
"fullscreen": "Enter fullscreen / Exit fullscreen",
"hideAnnotations": "Hide callouts",
"instructions": "Use Tab to reach a control and Enter or Space to activate it. With the chart focused, use plus and minus to zoom and arrow keys to pan.",
"orbit": "Chart controls · 3D ⟳",
"pan": "Chart controls · 3D ↔",
"projection": "Chart controls · 3D ◇",
"reset": "Reset view",
"showAnnotations": "Show callouts",
"toolbar": "Chart controls",
"unavailable": "WebGL is unavailable in this environment, so the 3D chart cannot be displayed.",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"orbit": true,
"pan": true,
"picking": true,
"tooltip": {
"fields": [
"kind",
"longitude",
"latitude",
"label",
"value",
"size",
"fromLongitude",
"fromLatitude",
"toLongitude",
"toLatitude"
],
"title": "Map · Natural Earth land and borders on a sphere with optional points and routes."
},
"wheel": "modifier",
"zoom": true
},
"landColor": "#79a78d",
"lighting": {
"ambient": 0.48,
"diffuse": 0.86,
"direction": [
-0.45,
0.82,
0.62
]
},
"oceanColor": "#0b2a4a",
"pointColor": "#fb7185",
"routeColor": "#fbbf24",
"theme": "graflume-light",
"title": "Map · Natural Earth land and borders on a sphere with optional points and routes."
}Select one country by ISO alpha-2 or a source alias and fit its detailed 1:10m boundary to the viewport.
StatusLoading
country-focusRow data and zero-copy TypedArray columns share one data contract.
countryCodeordinal | namenominal | valuequantitative |
|---|---|---|
| KR | South Korea | 92 |
Map · boundary scope
Search and select multiple countries and their principal administrative regions, then lazy-load only the required boundary shards into one map.
natural-earth-admin-0-admin-1-10m · 1:10m
Boundary display policy This statistical reference map follows Natural Earth's de facto boundary policy; it is not legal authority and does not imply universal agreement on political claims.
Browser API
const data = [
{
"countryCode": "KR",
"name": "South Korea",
"value": 92
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Single-country focus example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "countryCode",
"format": "auto",
"label": "CountryCode"
},
{
"field": "name",
"format": "auto",
"label": "Name"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Single-country focus",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"color": "value",
"dataKey": "countryCode",
"featureKey": "countryCode"
},
"options": {
"basemap": "natural-earth",
"fit": true,
"fitPadding": 28,
"geometryBudget": 240000,
"geometryDetail": "high",
"graticule": false,
"joinDuplicate": "error",
"joinUnmatched": "show",
"labels": {
"collision": "hide",
"field": "name",
"fontSize": 10,
"latitudeField": "labelLatitude",
"longitudeField": "labelLongitude",
"maximum": 120,
"padding": 3
},
"mapScope": {
"empty": "error",
"level": "country",
"property": "countryCode",
"unmatched": "error",
"values": [
"KR"
]
},
"maximumFeatures": 50000
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Select one country by ISO alpha-2 or a source alias and fit its detailed 1:10m boundary to the viewport.",
"text": "Map · Single-country focus"
},
"width": "container",
"x": {
"field": "countryCode",
"title": "countryCode",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "value",
"type": "quantitative"
}
};
Graflume.map('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Single-country focus example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "countryCode",
"format": "auto",
"label": "CountryCode"
},
{
"field": "name",
"format": "auto",
"label": "Name"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Single-country focus",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"color": "value",
"dataKey": "countryCode",
"featureKey": "countryCode"
},
"options": {
"basemap": "natural-earth",
"fit": true,
"fitPadding": 28,
"geometryBudget": 240000,
"geometryDetail": "high",
"graticule": false,
"joinDuplicate": "error",
"joinUnmatched": "show",
"labels": {
"collision": "hide",
"field": "name",
"fontSize": 10,
"latitudeField": "labelLatitude",
"longitudeField": "labelLongitude",
"maximum": 120,
"padding": 3
},
"mapScope": {
"empty": "error",
"level": "country",
"property": "countryCode",
"unmatched": "error",
"values": [
"KR"
]
},
"maximumFeatures": 50000
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Select one country by ISO alpha-2 or a source alias and fit its detailed 1:10m boundary to the viewport.",
"text": "Map · Single-country focus"
},
"width": "container",
"x": {
"field": "countryCode",
"title": "countryCode",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "value",
"type": "quantitative"
}
}Select two or more disjoint countries within the 50,000-value bound and automatically fit the combined extent.
StatusLoading
multi-countryRow data and zero-copy TypedArray columns share one data contract.
countryCodeordinal | namenominal | valuequantitative |
|---|---|---|
| KR | South Korea | 92 |
| JP | Japan | 86 |
| US | United States | 81 |
| CA | Canada | 74 |
| BR | Brazil | 77 |
| ZA | South Africa | 69 |
| FR | France | 83 |
| AU | Australia | 79 |
Map · boundary scope
Search and select multiple countries and their principal administrative regions, then lazy-load only the required boundary shards into one map.
natural-earth-admin-0-admin-1-10m · 1:10m
Boundary display policy This statistical reference map follows Natural Earth's de facto boundary policy; it is not legal authority and does not imply universal agreement on political claims.
Browser API
const data = [
{
"countryCode": "KR",
"name": "South Korea",
"value": 92
},
{
"countryCode": "JP",
"name": "Japan",
"value": 86
},
{
"countryCode": "US",
"name": "United States",
"value": 81
},
{
"countryCode": "CA",
"name": "Canada",
"value": 74
},
{
"countryCode": "BR",
"name": "Brazil",
"value": 77
},
{
"countryCode": "ZA",
"name": "South Africa",
"value": 69
},
{
"countryCode": "FR",
"name": "France",
"value": 83
},
{
"countryCode": "AU",
"name": "Australia",
"value": 79
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Multi-country selection example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "countryCode",
"format": "auto",
"label": "CountryCode"
},
{
"field": "name",
"format": "auto",
"label": "Name"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Multi-country selection",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"color": "value",
"dataKey": "countryCode",
"featureKey": "countryCode"
},
"options": {
"basemap": "natural-earth",
"fit": true,
"fitPadding": 28,
"geometryBudget": 240000,
"geometryDetail": "auto",
"graticule": false,
"joinDuplicate": "error",
"joinUnmatched": "show",
"labels": {
"collision": "hide",
"field": "name",
"fontSize": 10,
"latitudeField": "labelLatitude",
"longitudeField": "labelLongitude",
"maximum": 120,
"padding": 3
},
"mapScope": {
"empty": "error",
"level": "country",
"property": "countryCode",
"unmatched": "error",
"values": [
"KR",
"JP",
"US",
"CA",
"BR",
"ZA",
"FR",
"AU"
]
},
"maximumFeatures": 50000
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Select two or more disjoint countries within the 50,000-value bound and automatically fit the combined extent.",
"text": "Map · Multi-country selection"
},
"width": "container",
"x": {
"field": "countryCode",
"title": "countryCode",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "value",
"type": "quantitative"
}
};
Graflume.map('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Multi-country selection example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "countryCode",
"format": "auto",
"label": "CountryCode"
},
{
"field": "name",
"format": "auto",
"label": "Name"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Multi-country selection",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"color": "value",
"dataKey": "countryCode",
"featureKey": "countryCode"
},
"options": {
"basemap": "natural-earth",
"fit": true,
"fitPadding": 28,
"geometryBudget": 240000,
"geometryDetail": "auto",
"graticule": false,
"joinDuplicate": "error",
"joinUnmatched": "show",
"labels": {
"collision": "hide",
"field": "name",
"fontSize": 10,
"latitudeField": "labelLatitude",
"longitudeField": "labelLongitude",
"maximum": 120,
"padding": 3
},
"mapScope": {
"empty": "error",
"level": "country",
"property": "countryCode",
"unmatched": "error",
"values": [
"KR",
"JP",
"US",
"CA",
"BR",
"ZA",
"FR",
"AU"
]
},
"maximumFeatures": 50000
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Select two or more disjoint countries within the 50,000-value bound and automatically fit the combined extent.",
"text": "Map · Multi-country selection"
},
"width": "container",
"x": {
"field": "countryCode",
"title": "countryCode",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "value",
"type": "quantitative"
}
}Choose a country, search its Natural Earth Admin-1 principal regions, and join subdivision codes to statistical values exactly.
StatusLoading
principal-regionRow data and zero-copy TypedArray columns share one data contract.
regionCodeordinal | countryCodeordinal | namenominal | valuequantitative |
|---|---|---|---|
| KR-11 | KR | Seoul | 96 |
| KR-26 | KR | Busan | 82 |
| KR-27 | KR | Daegu | 71 |
| KR-28 | KR | Incheon | 78 |
| KR-29 | KR | Gwangju | 66 |
| KR-30 | KR | Daejeon | 74 |
| KR-31 | KR | Ulsan | 68 |
| KR-41 | KR | Gyeonggi | 89 |
Map · boundary scope
Search and select multiple countries and their principal administrative regions, then lazy-load only the required boundary shards into one map.
natural-earth-admin-0-admin-1-10m · 1:10m
Boundary display policy This statistical reference map follows Natural Earth's de facto boundary policy; it is not legal authority and does not imply universal agreement on political claims.
Browser API
const data = [
{
"countryCode": "KR",
"name": "Seoul",
"regionCode": "KR-11",
"value": 96
},
{
"countryCode": "KR",
"name": "Busan",
"regionCode": "KR-26",
"value": 82
},
{
"countryCode": "KR",
"name": "Daegu",
"regionCode": "KR-27",
"value": 71
},
{
"countryCode": "KR",
"name": "Incheon",
"regionCode": "KR-28",
"value": 78
},
{
"countryCode": "KR",
"name": "Gwangju",
"regionCode": "KR-29",
"value": 66
},
{
"countryCode": "KR",
"name": "Daejeon",
"regionCode": "KR-30",
"value": 74
},
{
"countryCode": "KR",
"name": "Ulsan",
"regionCode": "KR-31",
"value": 68
},
{
"countryCode": "KR",
"name": "Gyeonggi",
"regionCode": "KR-41",
"value": 89
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Principal regions in one country example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "regionCode",
"format": "auto",
"label": "RegionCode"
},
{
"field": "countryCode",
"format": "auto",
"label": "CountryCode"
},
{
"field": "name",
"format": "auto",
"label": "Name"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Principal regions in one country",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"color": "value",
"dataKey": "regionCode",
"featureKey": "$id"
},
"options": {
"basemap": "natural-earth",
"fit": true,
"fitPadding": 28,
"geometryBudget": 240000,
"geometryDetail": "high",
"graticule": false,
"joinDuplicate": "error",
"joinUnmatched": "show",
"labels": {
"collision": "hide",
"field": "name",
"fontSize": 10,
"latitudeField": "labelLatitude",
"longitudeField": "labelLongitude",
"maximum": 120,
"padding": 3
},
"mapScope": {
"empty": "error",
"level": "region",
"parentProperty": "countryCode",
"parentValues": [
"KR"
],
"property": "$id",
"unmatched": "error",
"values": [
"KR-11",
"KR-26",
"KR-27",
"KR-28",
"KR-29",
"KR-30",
"KR-31",
"KR-41"
]
},
"maximumFeatures": 50000
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Choose a country, search its Natural Earth Admin-1 principal regions, and join subdivision codes to statistical values exactly.",
"text": "Map · Principal regions in one country"
},
"width": "container",
"x": {
"field": "countryCode",
"title": "countryCode",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "value",
"type": "quantitative"
}
};
Graflume.map('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Principal regions in one country example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "regionCode",
"format": "auto",
"label": "RegionCode"
},
{
"field": "countryCode",
"format": "auto",
"label": "CountryCode"
},
{
"field": "name",
"format": "auto",
"label": "Name"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Principal regions in one country",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"color": "value",
"dataKey": "regionCode",
"featureKey": "$id"
},
"options": {
"basemap": "natural-earth",
"fit": true,
"fitPadding": 28,
"geometryBudget": 240000,
"geometryDetail": "high",
"graticule": false,
"joinDuplicate": "error",
"joinUnmatched": "show",
"labels": {
"collision": "hide",
"field": "name",
"fontSize": 10,
"latitudeField": "labelLatitude",
"longitudeField": "labelLongitude",
"maximum": 120,
"padding": 3
},
"mapScope": {
"empty": "error",
"level": "region",
"parentProperty": "countryCode",
"parentValues": [
"KR"
],
"property": "$id",
"unmatched": "error",
"values": [
"KR-11",
"KR-26",
"KR-27",
"KR-28",
"KR-29",
"KR-30",
"KR-31",
"KR-41"
]
},
"maximumFeatures": 50000
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Choose a country, search its Natural Earth Admin-1 principal regions, and join subdivision codes to statistical values exactly.",
"text": "Map · Principal regions in one country"
},
"width": "container",
"x": {
"field": "countryCode",
"title": "countryCode",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "value",
"type": "quantitative"
}
}Select two or more regions from one or several countries and compare them in one fitted view and color scale.
StatusLoading
multi-regionRow data and zero-copy TypedArray columns share one data contract.
regionCodeordinal | countryCodeordinal | namenominal | valuequantitative |
|---|---|---|---|
| KR-11 | KR | Seoul | 96 |
| KR-26 | KR | Busan | 82 |
| KR-27 | KR | Daegu | 71 |
| KR-28 | KR | Incheon | 78 |
| KR-29 | KR | Gwangju | 66 |
| KR-30 | KR | Daejeon | 74 |
| KR-31 | KR | Ulsan | 68 |
| KR-41 | KR | Gyeonggi | 89 |
Map · boundary scope
Search and select multiple countries and their principal administrative regions, then lazy-load only the required boundary shards into one map.
natural-earth-admin-0-admin-1-10m · 1:10m
Boundary display policy This statistical reference map follows Natural Earth's de facto boundary policy; it is not legal authority and does not imply universal agreement on political claims.
Browser API
const data = [
{
"countryCode": "KR",
"name": "Seoul",
"regionCode": "KR-11",
"value": 96
},
{
"countryCode": "KR",
"name": "Busan",
"regionCode": "KR-26",
"value": 82
},
{
"countryCode": "KR",
"name": "Daegu",
"regionCode": "KR-27",
"value": 71
},
{
"countryCode": "KR",
"name": "Incheon",
"regionCode": "KR-28",
"value": 78
},
{
"countryCode": "KR",
"name": "Gwangju",
"regionCode": "KR-29",
"value": 66
},
{
"countryCode": "KR",
"name": "Daejeon",
"regionCode": "KR-30",
"value": 74
},
{
"countryCode": "KR",
"name": "Ulsan",
"regionCode": "KR-31",
"value": 68
},
{
"countryCode": "KR",
"name": "Gyeonggi",
"regionCode": "KR-41",
"value": 89
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Multi-region selection example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "regionCode",
"format": "auto",
"label": "RegionCode"
},
{
"field": "countryCode",
"format": "auto",
"label": "CountryCode"
},
{
"field": "name",
"format": "auto",
"label": "Name"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Multi-region selection",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"color": "value",
"dataKey": "regionCode",
"featureKey": "$id"
},
"options": {
"basemap": "natural-earth",
"fit": true,
"fitPadding": 28,
"geometryBudget": 240000,
"geometryDetail": "auto",
"graticule": false,
"joinDuplicate": "error",
"joinUnmatched": "show",
"labels": {
"collision": "hide",
"field": "name",
"fontSize": 10,
"latitudeField": "labelLatitude",
"longitudeField": "labelLongitude",
"maximum": 120,
"padding": 3
},
"mapScope": {
"empty": "error",
"level": "region",
"parentProperty": "countryCode",
"parentValues": [
"KR"
],
"property": "$id",
"unmatched": "error",
"values": [
"KR-11",
"KR-26",
"KR-28",
"KR-41"
]
},
"maximumFeatures": 50000
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Select two or more regions from one or several countries and compare them in one fitted view and color scale.",
"text": "Map · Multi-region selection"
},
"width": "container",
"x": {
"field": "countryCode",
"title": "countryCode",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "value",
"type": "quantitative"
}
};
Graflume.map('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Multi-region selection example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "regionCode",
"format": "auto",
"label": "RegionCode"
},
{
"field": "countryCode",
"format": "auto",
"label": "CountryCode"
},
{
"field": "name",
"format": "auto",
"label": "Name"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Multi-region selection",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"color": "value",
"dataKey": "regionCode",
"featureKey": "$id"
},
"options": {
"basemap": "natural-earth",
"fit": true,
"fitPadding": 28,
"geometryBudget": 240000,
"geometryDetail": "auto",
"graticule": false,
"joinDuplicate": "error",
"joinUnmatched": "show",
"labels": {
"collision": "hide",
"field": "name",
"fontSize": 10,
"latitudeField": "labelLatitude",
"longitudeField": "labelLongitude",
"maximum": 120,
"padding": 3
},
"mapScope": {
"empty": "error",
"level": "region",
"parentProperty": "countryCode",
"parentValues": [
"KR"
],
"property": "$id",
"unmatched": "error",
"values": [
"KR-11",
"KR-26",
"KR-28",
"KR-41"
]
},
"maximumFeatures": 50000
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Select two or more regions from one or several countries and compare them in one fitted view and color scale.",
"text": "Map · Multi-region selection"
},
"width": "container",
"x": {
"field": "countryCode",
"title": "countryCode",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "value",
"type": "quantitative"
}
}Combine complete country boundaries and selected detailed regions into one collection for cross-level comparison.
StatusLoading
mixed-selectionRow data and zero-copy TypedArray columns share one data contract.
regionCodeordinal | countryCodeordinal | namenominal | valuequantitative |
|---|---|---|---|
| JP | JP | Japan | 86 |
| AU | AU | Australia | 79 |
| KR-11 | KR | Seoul | 96 |
| KR-26 | KR | Busan | 82 |
| KR-41 | KR | Gyeonggi | 89 |
Map · boundary scope
Search and select multiple countries and their principal administrative regions, then lazy-load only the required boundary shards into one map.
natural-earth-admin-0-admin-1-10m · 1:10m
Boundary display policy This statistical reference map follows Natural Earth's de facto boundary policy; it is not legal authority and does not imply universal agreement on political claims.
Browser API
const data = [
{
"countryCode": "JP",
"name": "Japan",
"regionCode": "JP",
"value": 86
},
{
"countryCode": "AU",
"name": "Australia",
"regionCode": "AU",
"value": 79
},
{
"countryCode": "KR",
"name": "Seoul",
"regionCode": "KR-11",
"value": 96
},
{
"countryCode": "KR",
"name": "Busan",
"regionCode": "KR-26",
"value": 82
},
{
"countryCode": "KR",
"name": "Gyeonggi",
"regionCode": "KR-41",
"value": 89
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Mixed country and region selection example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "regionCode",
"format": "auto",
"label": "RegionCode"
},
{
"field": "countryCode",
"format": "auto",
"label": "CountryCode"
},
{
"field": "name",
"format": "auto",
"label": "Name"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Mixed country and region selection",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"color": "value",
"dataKey": "regionCode",
"featureKey": "$id"
},
"options": {
"basemap": "natural-earth",
"fit": true,
"fitPadding": 28,
"geometryBudget": 240000,
"geometryDetail": "auto",
"graticule": false,
"joinDuplicate": "error",
"joinUnmatched": "show",
"labels": {
"collision": "hide",
"field": "name",
"fontSize": 10,
"latitudeField": "labelLatitude",
"longitudeField": "labelLongitude",
"maximum": 120,
"padding": 3
},
"mapScope": {
"empty": "error",
"level": "feature",
"property": "$id",
"unmatched": "error",
"values": [
"JP",
"AU",
"KR-11",
"KR-26",
"KR-41"
]
},
"maximumFeatures": 50000
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Combine complete country boundaries and selected detailed regions into one collection for cross-level comparison.",
"text": "Map · Mixed country and region selection"
},
"width": "container",
"x": {
"field": "countryCode",
"title": "countryCode",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "value",
"type": "quantitative"
}
};
Graflume.map('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Mixed country and region selection example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "regionCode",
"format": "auto",
"label": "RegionCode"
},
{
"field": "countryCode",
"format": "auto",
"label": "CountryCode"
},
{
"field": "name",
"format": "auto",
"label": "Name"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Mixed country and region selection",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"color": "value",
"dataKey": "regionCode",
"featureKey": "$id"
},
"options": {
"basemap": "natural-earth",
"fit": true,
"fitPadding": 28,
"geometryBudget": 240000,
"geometryDetail": "auto",
"graticule": false,
"joinDuplicate": "error",
"joinUnmatched": "show",
"labels": {
"collision": "hide",
"field": "name",
"fontSize": 10,
"latitudeField": "labelLatitude",
"longitudeField": "labelLongitude",
"maximum": 120,
"padding": 3
},
"mapScope": {
"empty": "error",
"level": "feature",
"property": "$id",
"unmatched": "error",
"values": [
"JP",
"AU",
"KR-11",
"KR-26",
"KR-41"
]
},
"maximumFeatures": 50000
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Combine complete country boundaries and selected detailed regions into one collection for cross-level comparison.",
"text": "Map · Mixed country and region selection"
},
"width": "container",
"x": {
"field": "countryCode",
"title": "countryCode",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "value",
"type": "quantitative"
}
}Inspect the pinned Natural Earth revision covering 249 ISO 3166-1 entities, XK, source additions, and every source Admin-1 feature indexed by this catalog.
StatusLoading
world-catalogRow data and zero-copy TypedArray columns share one data contract.
countryCodeordinal | namenominal | valuequantitative |
|---|---|---|
| KR | South Korea | 92 |
| JP | Japan | 86 |
| US | United States | 81 |
| CA | Canada | 74 |
Map · boundary scope
Search and select multiple countries and their principal administrative regions, then lazy-load only the required boundary shards into one map.
natural-earth-admin-0-admin-1-10m · 1:10m
Boundary display policy This statistical reference map follows Natural Earth's de facto boundary policy; it is not legal authority and does not imply universal agreement on political claims.
Browser API
const data = [
{
"countryCode": "KR",
"name": "South Korea",
"value": 92
},
{
"countryCode": "JP",
"name": "Japan",
"value": 86
},
{
"countryCode": "US",
"name": "United States",
"value": 81
},
{
"countryCode": "CA",
"name": "Canada",
"value": 74
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Detailed world catalog and provenance example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "countryCode",
"format": "auto",
"label": "CountryCode"
},
{
"field": "name",
"format": "auto",
"label": "Name"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Detailed world catalog and provenance",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"color": "value",
"dataKey": "countryCode",
"featureKey": "countryCode"
},
"options": {
"basemap": "natural-earth",
"fit": true,
"fitPadding": 28,
"geometryBudget": 240000,
"geometryDetail": "auto",
"graticule": false,
"joinDuplicate": "error",
"joinUnmatched": "show",
"mapScope": {
"empty": "error",
"level": "country",
"property": "countryCode",
"unmatched": "error",
"values": [
"KR",
"JP",
"US",
"BR"
]
},
"maximumFeatures": 50000
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Inspect the pinned Natural Earth revision covering 249 ISO 3166-1 entities, XK, source additions, and every source Admin-1 feature indexed by this catalog.",
"text": "Map · Detailed world catalog and provenance"
},
"width": "container",
"x": {
"field": "countryCode",
"title": "countryCode",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "value",
"type": "quantitative"
}
};
Graflume.map('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Detailed world catalog and provenance example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "countryCode",
"format": "auto",
"label": "CountryCode"
},
{
"field": "name",
"format": "auto",
"label": "Name"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Detailed world catalog and provenance",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"color": "value",
"dataKey": "countryCode",
"featureKey": "countryCode"
},
"options": {
"basemap": "natural-earth",
"fit": true,
"fitPadding": 28,
"geometryBudget": 240000,
"geometryDetail": "auto",
"graticule": false,
"joinDuplicate": "error",
"joinUnmatched": "show",
"mapScope": {
"empty": "error",
"level": "country",
"property": "countryCode",
"unmatched": "error",
"values": [
"KR",
"JP",
"US",
"BR"
]
},
"maximumFeatures": 50000
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Inspect the pinned Natural Earth revision covering 249 ISO 3166-1 entities, XK, source additions, and every source Admin-1 feature indexed by this catalog.",
"text": "Map · Detailed world catalog and provenance"
},
"width": "container",
"x": {
"field": "countryCode",
"title": "countryCode",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "value",
"type": "quantitative"
}
}Fit center and zoom to the selection, adapt detail to the geometry budget, and hide colliding labels deterministically.
StatusLoading
fit-detail-labelsRow data and zero-copy TypedArray columns share one data contract.
regionCodeordinal | countryCodeordinal | namenominal | valuequantitative |
|---|---|---|---|
| KR-11 | KR | Seoul | 96 |
| KR-26 | KR | Busan | 82 |
| KR-27 | KR | Daegu | 71 |
| KR-28 | KR | Incheon | 78 |
Map · boundary scope
Search and select multiple countries and their principal administrative regions, then lazy-load only the required boundary shards into one map.
natural-earth-admin-0-admin-1-10m · 1:10m
Boundary display policy This statistical reference map follows Natural Earth's de facto boundary policy; it is not legal authority and does not imply universal agreement on political claims.
Browser API
const data = [
{
"countryCode": "KR",
"name": "Seoul",
"regionCode": "KR-11",
"value": 96
},
{
"countryCode": "KR",
"name": "Busan",
"regionCode": "KR-26",
"value": 82
},
{
"countryCode": "KR",
"name": "Daegu",
"regionCode": "KR-27",
"value": 71
},
{
"countryCode": "KR",
"name": "Incheon",
"regionCode": "KR-28",
"value": 78
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Automatic fit, detail, and labels example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "regionCode",
"format": "auto",
"label": "RegionCode"
},
{
"field": "countryCode",
"format": "auto",
"label": "CountryCode"
},
{
"field": "name",
"format": "auto",
"label": "Name"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Automatic fit, detail, and labels",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"color": "value",
"dataKey": "regionCode",
"featureKey": "$id"
},
"options": {
"basemap": "natural-earth",
"fit": true,
"fitPadding": 28,
"geometryBudget": 240000,
"geometryDetail": "auto",
"graticule": false,
"joinDuplicate": "error",
"joinUnmatched": "show",
"labels": {
"collision": "hide",
"field": "name",
"fontSize": 10,
"latitudeField": "labelLatitude",
"longitudeField": "labelLongitude",
"maximum": 120,
"padding": 3
},
"mapScope": {
"empty": "error",
"level": "region",
"parentProperty": "countryCode",
"parentValues": [
"KR"
],
"property": "$id",
"unmatched": "error",
"values": [
"KR-11",
"KR-26",
"KR-28",
"KR-41"
]
},
"maximumFeatures": 50000
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Fit center and zoom to the selection, adapt detail to the geometry budget, and hide colliding labels deterministically.",
"text": "Map · Automatic fit, detail, and labels"
},
"width": "container",
"x": {
"field": "countryCode",
"title": "countryCode",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "value",
"type": "quantitative"
}
};
Graflume.map('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · Automatic fit, detail, and labels example"
},
"axes": {
"x": false,
"y": false
},
"basemap": "natural-earth",
"graticule": false,
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "regionCode",
"format": "auto",
"label": "RegionCode"
},
{
"field": "countryCode",
"format": "auto",
"label": "CountryCode"
},
{
"field": "name",
"format": "auto",
"label": "Name"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · Automatic fit, detail, and labels",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"fields": {
"color": "value",
"dataKey": "regionCode",
"featureKey": "$id"
},
"options": {
"basemap": "natural-earth",
"fit": true,
"fitPadding": 28,
"geometryBudget": 240000,
"geometryDetail": "auto",
"graticule": false,
"joinDuplicate": "error",
"joinUnmatched": "show",
"labels": {
"collision": "hide",
"field": "name",
"fontSize": 10,
"latitudeField": "labelLatitude",
"longitudeField": "labelLongitude",
"maximum": 120,
"padding": 3
},
"mapScope": {
"empty": "error",
"level": "region",
"parentProperty": "countryCode",
"parentValues": [
"KR"
],
"property": "$id",
"unmatched": "error",
"values": [
"KR-11",
"KR-26",
"KR-28",
"KR-41"
]
},
"maximumFeatures": 50000
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Fit center and zoom to the selection, adapt detail to the geometry budget, and hide colliding labels deterministically.",
"text": "Map · Automatic fit, detail, and labels"
},
"width": "container",
"x": {
"field": "countryCode",
"title": "countryCode",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "value",
"type": "quantitative"
}
}Edge cases
Exercise numeric range, sparse structure, and large inputs with valid data. Each tab materializes data only when needed and never silently repairs invalid values.
Mix zero, very small finite values, and very large finite values to verify automatic domains, precision, and stable geometry. NaN and Infinity remain intentionally invalid. It applies 2 data-integrity rules that preserve finite values and axis domains.
StatusLoading
extreme-rangeextreme-smallextreme-largezeromixed-signbudget:marks<=6Loading
Row data and zero-copy TypedArray columns share one data contract.
longitudequantitative | latitudequantitative | valuequantitative |
|---|---|---|
| 126.98 | 37.57 | -1e+12 |
| 139.69 | 35.68 | -1e-09 |
| 103.82 | 1.35 | 0 |
| 77.21 | 28.61 | 1e+12 |
| 2.35 | 48.86 | 1e-09 |
| -74 | 40.71 | 1e+06 |
Browser API
const data = [
{
"latitude": 37.57,
"longitude": 126.98,
"value": -1000000000000
},
{
"latitude": 35.68,
"longitude": 139.69,
"value": -1e-9
},
{
"latitude": 1.35,
"longitude": 103.82,
"value": 0
},
{
"latitude": 28.61,
"longitude": 77.21,
"value": 1000000000000
},
{
"latitude": 48.86,
"longitude": 2.35,
"value": 1e-9
},
{
"latitude": 40.71,
"longitude": -74,
"value": 1000000
}
];
const options = {
"accessibility": {
"description": "Regional adoption and routes connecting Statground teams around the world. The example uses curated, deterministic data and exposes its exact values in a semantic table.",
"label": "Map"
},
"axes": {
"x": false,
"y": false
},
"height": 620,
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"title": {
"subtitle": "edge case · range",
"text": "Map"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
};
Graflume.map('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Regional adoption and routes connecting Statground teams around the world. The example uses curated, deterministic data and exposes its exact values in a semantic table.",
"label": "Map"
},
"axes": {
"x": false,
"y": false
},
"height": 620,
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"title": {
"subtitle": "edge case · range",
"text": "Map"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
}Exercise only duplicate, missing, sparse, or out-of-order structures whose meaning is defined for this family. Broken references and malformed tuples are never disguised as successful examples. It applies 3 structural rules that preserve the meaning of missing, duplicate, and ordered values.
StatusLoading
irregular-structureduplicate-keynullantimeridianpolar-coordinatebudget:marks<=7Loading
Row data and zero-copy TypedArray columns share one data contract.
longitudequantitative | latitudequantitative | valuequantitative |
|---|---|---|
| 126.98 | 37.57 | 92 |
| 139.69 | 35.68 | — |
| 126.98 | 37.57 | 92 |
| 103.82 | 1.35 | 64 |
| 77.21 | 28.61 | 58 |
| 2.35 | 48.86 | 73 |
| -74 | 40.71 | 88 |
Browser API
const data = [
{
"latitude": 37.57,
"longitude": 126.98,
"value": 92
},
{
"latitude": 35.68,
"longitude": 139.69,
"value": null
},
{
"latitude": 37.57,
"longitude": 126.98,
"value": 92
},
{
"latitude": 1.35,
"longitude": 103.82,
"value": 64
},
{
"latitude": 28.61,
"longitude": 77.21,
"value": 58
},
{
"latitude": 48.86,
"longitude": 2.35,
"value": 73
},
{
"latitude": 40.71,
"longitude": -74,
"value": 88
}
];
const options = {
"accessibility": {
"description": "Regional adoption and routes connecting Statground teams around the world. The example uses curated, deterministic data and exposes its exact values in a semantic table.",
"label": "Map · Sparse and irregular structure"
},
"axes": {
"x": false,
"y": false
},
"height": 620,
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"title": {
"subtitle": "edge case · structure",
"text": "Map · Sparse and irregular structure"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
};
Graflume.map('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Regional adoption and routes connecting Statground teams around the world. The example uses curated, deterministic data and exposes its exact values in a semantic table.",
"label": "Map · Sparse and irregular structure"
},
"axes": {
"x": false,
"y": false
},
"height": 620,
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"title": {
"subtitle": "edge case · structure",
"text": "Map · Sparse and irregular structure"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
}Materialize a deterministic compact recipe only when this tab opens. Graflume's performance profile bounds mark count, hit testing, and animation work for the input size. It applies 6 high-volume rules for deterministic generation and bounded output. This family materializes 60,000 logical rows and bounds rendered point marks at 20,000.
StatusLoading
high-row-cardinalityall-input-rows-generatedall-input-rows-processeddeterministic-generationbounded-renderinginput:60000zoom-pan-resetbudget:point-marks<=20000legend · explicit · 1 channelshighlights[] · datum · longitudeannotations[] · datum · longitude · callout · placement:autoLoading
Browser API
const recipe = {
"cardinality": {
"axes": {},
"sourceRows": 60000,
"unit": "rows"
},
"expectedInvariants": [
"finite-json",
"longitude-closed-minus180-180",
"latitude-closed-minus90-90"
],
"id": "geo-events",
"initialView": {
"kind": "viewport",
"xDomain": [
-180,
180
],
"yDomain": [
-70,
80
],
"zoom": 1
},
"outputBudget": {
"maximum": 20000,
"resource": "point-marks"
},
"parameters": {
"family": "map",
"geometry": "projected-points",
"nullableFields": [
"value"
],
"positiveFields": [],
"scenario": "volume",
"valueFields": [
"value"
],
"valuePolicy": "signed"
},
"preview": {
"maximumRows": 12,
"method": "spatial-slice"
},
"reduction": {
"method": "geohash-stratified-sample",
"stage": "sample"
},
"seed": 2716439227,
"shape": "rows",
"version": 2
};
const { data, previewRows, plan } = Graflume.materializeDemoRecipe(recipe);
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · High data volume"
},
"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": "longitude",
"type": "datum",
"value": -43.81583
},
"text": "Point and range highlights · -43.81583"
}
],
"axes": {
"x": false,
"y": false
},
"create": {
"adaptive": {
"environment": {
"rowCount": 60000
},
"largeDataNavigation": true,
"profiles": "auto"
}
},
"height": 620,
"highlights": [
{
"id": "manual-focus",
"padding": 7,
"target": {
"field": "longitude",
"type": "datum",
"value": -43.81583
}
}
],
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "longitude",
"format": "number",
"label": "Longitude"
},
{
"field": "latitude",
"format": "number",
"label": "Latitude"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · High data volume",
"trigger": "mark"
}
},
"legend": {
"interactive": false,
"items": [
{
"id": "semantic-0",
"label": "Activity · size"
}
],
"labels": {
"hide": "Hide",
"show": "Show"
},
"maxItems": 8,
"mode": "layers",
"orientation": "horizontal",
"position": "bottom",
"title": "Map · High data volume",
"visible": true
},
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"padding": {
"top": 52
},
"performance": "auto",
"theme": "graflume-light",
"title": {
"subtitle": "Regional adoption and routes connecting Statground teams around the world · 60,000 logical rows, screen-aware detail",
"text": "Map · High data volume"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
};
Graflume.map('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Map · High data volume"
},
"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": "longitude",
"type": "datum",
"value": -43.81583
},
"text": "Point and range highlights · -43.81583"
}
],
"axes": {
"x": false,
"y": false
},
"create": {
"adaptive": {
"environment": {
"rowCount": 60000
},
"largeDataNavigation": true,
"profiles": "auto"
}
},
"height": 620,
"highlights": [
{
"id": "manual-focus",
"padding": 7,
"target": {
"field": "longitude",
"type": "datum",
"value": -43.81583
}
}
],
"interaction": {
"controls": {
"annotations": false,
"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"
},
"tooltip": {
"fields": [
{
"field": "longitude",
"format": "number",
"label": "Longitude"
},
{
"field": "latitude",
"format": "number",
"label": "Latitude"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map · High data volume",
"trigger": "mark"
}
},
"legend": {
"interactive": false,
"items": [
{
"id": "semantic-0",
"label": "Activity · size"
}
],
"labels": {
"hide": "Hide",
"show": "Show"
},
"maxItems": 8,
"mode": "layers",
"orientation": "horizontal",
"position": "bottom",
"title": "Map · High data volume",
"visible": true
},
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"padding": {
"top": 52
},
"performance": "auto",
"theme": "graflume-light",
"title": {
"subtitle": "Regional adoption and routes connecting Statground teams around the world · 60,000 logical rows, screen-aware detail",
"text": "Map · High data volume"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
}Extreme environments
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.
Reflow axes, legends, descriptions, and controls from the available container size.
960×540 · adaptive.profiles=responsive-fluidzoom-reflowshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatialPrioritize 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-spatialKeep 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-tinyPrefer 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-spatialUse 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-spatialReduce 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-tinyReflow 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-spatialKeep the chart and explanation in independent viewport segments without crossing the hinge.
720×640 · adaptive.profiles=foldable-dualfoldable-dualshape-dualdisplay-colorinput-finemotion-fullrenderer-canvas-spatialProvide 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-spatialPair 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-spatialHonor 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-spatialComplete 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-spatialInspect 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-spatialReach 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-spatialPrefer 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-spatialFollow 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-spatialReflow 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-spatialCap 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-spatialProvide 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-spatialA 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-fallbackFall 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-spatialInset 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-tinyReflow 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-spatialChoose 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-branchinglegend · explicit · 1 channelshighlights[] · datum · longitudeannotations[] · datum · longitude · callout · placement:autoselection · multiple · toggleLoading
Row data and zero-copy TypedArray columns share one data contract.
longitudequantitative | latitudequantitative | valuequantitative |
|---|---|---|
| 126.98 | 37.57 | 92 |
| 139.69 | 35.68 | 78 |
| 103.82 | 1.35 | 64 |
| 77.21 | 28.61 | 58 |
| 2.35 | 48.86 | 73 |
| -74 | 40.71 | 88 |
| -122.42 | 37.77 | 69 |
| 151.21 | -33.87 | 51 |
Browser API
const data = [
{
"latitude": 37.57,
"latitude2": 35.68,
"longitude": 126.98,
"longitude2": 139.69,
"name": "Seoul",
"value": 92
},
{
"latitude": 35.68,
"latitude2": 1.35,
"longitude": 139.69,
"longitude2": 103.82,
"name": "Tokyo",
"value": 78
},
{
"latitude": 1.35,
"latitude2": 28.61,
"longitude": 103.82,
"longitude2": 77.21,
"name": "Singapore",
"value": 64
},
{
"latitude": 28.61,
"latitude2": 48.86,
"longitude": 77.21,
"longitude2": 2.35,
"name": "Delhi",
"value": 58
},
{
"latitude": 48.86,
"latitude2": 40.71,
"longitude": 2.35,
"longitude2": -74,
"name": "Paris",
"value": 73
},
{
"latitude": 40.71,
"latitude2": 37.77,
"longitude": -74,
"longitude2": -122.42,
"name": "New York",
"value": 88
},
{
"latitude": 37.77,
"latitude2": 19.43,
"longitude": -122.42,
"longitude2": -99.13,
"name": "San Francisco",
"value": 69
},
{
"latitude": -33.87,
"latitude2": 37.57,
"longitude": 151.21,
"longitude2": 126.98,
"name": "Sydney",
"value": 51
}
];
const options = {
"accessibility": {
"description": "Compare activity across five global cities on built-in Natural Earth 1:110m country boundaries, with no external tile/API requests.",
"label": "Map: Regional adoption and routes connecting Statground teams around the world"
},
"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": "longitude",
"type": "datum",
"value": 2.35
},
"text": "Point and range highlights · 2.35"
}
],
"axes": {
"x": false,
"y": false
},
"create": {
"adaptive": {
"profiles": "auto"
}
},
"height": 620,
"highlights": [
{
"id": "manual-focus",
"padding": 7,
"target": {
"field": "longitude",
"type": "datum",
"value": 2.35
}
}
],
"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": "longitude",
"mode": "multiple",
"toggle": true
},
"tooltip": {
"fields": [
{
"field": "longitude",
"format": "number",
"label": "Longitude"
},
{
"field": "latitude",
"format": "number",
"label": "Latitude"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map",
"trigger": "mark"
}
},
"legend": {
"interactive": false,
"items": [
{
"id": "semantic-0",
"label": "Activity · size"
}
],
"labels": {
"hide": "Hide",
"show": "Show"
},
"maxItems": 8,
"mode": "layers",
"orientation": "horizontal",
"position": "bottom",
"title": "Map",
"visible": true
},
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Regional adoption and routes connecting Statground teams around the world",
"text": "Map"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
};
Graflume.map('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Compare activity across five global cities on built-in Natural Earth 1:110m country boundaries, with no external tile/API requests.",
"label": "Map: Regional adoption and routes connecting Statground teams around the world"
},
"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": "longitude",
"type": "datum",
"value": 2.35
},
"text": "Point and range highlights · 2.35"
}
],
"axes": {
"x": false,
"y": false
},
"create": {
"adaptive": {
"profiles": "auto"
}
},
"height": 620,
"highlights": [
{
"id": "manual-focus",
"padding": 7,
"target": {
"field": "longitude",
"type": "datum",
"value": 2.35
}
}
],
"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": "longitude",
"mode": "multiple",
"toggle": true
},
"tooltip": {
"fields": [
{
"field": "longitude",
"format": "number",
"label": "Longitude"
},
{
"field": "latitude",
"format": "number",
"label": "Latitude"
},
{
"field": "value",
"format": "number",
"label": "Value"
}
],
"title": "Map",
"trigger": "mark"
}
},
"legend": {
"interactive": false,
"items": [
{
"id": "semantic-0",
"label": "Activity · size"
}
],
"labels": {
"hide": "Hide",
"show": "Show"
},
"maxItems": 8,
"mode": "layers",
"orientation": "horizontal",
"position": "bottom",
"title": "Map",
"visible": true
},
"locale": "en",
"mark": {
"fields": {
"size": "value"
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Regional adoption and routes connecting Statground teams around the world",
"text": "Map"
},
"width": "container",
"x": {
"field": "longitude",
"title": "Longitude",
"type": "quantitative"
},
"y": {
"field": "latitude",
"title": "Latitude",
"type": "quantitative"
}
}Catalog
The source-controlled catalog maps callable modes in this family and compatibility identifiers to their canonical modes. This table contains executable entries only.
9 modes · 7 compatibility identifiers
| ID | Name | Quick API | mode | mark | renderer |
|---|---|---|---|---|---|
geo | Geographic region chart | geo() | region | geo | canvas |
map | Map | map() | default | map | canvas |
flow-map | Flow map | flowMap() | flow-map | geo-flow | canvas |
geo-heatmap | Geographic heatmap | geoHeatmap() | geo-heatmap | geo-heatmap | canvas |
map-bubble | Map bubble chart | mapBubble() | map-bubble | map | canvas |
map-line | Map line chart | mapLine() | map-line | geo-line | canvas |
map-point | Map point chart | mapPoint() | map-point | map | canvas |
tiled-map deprecated → map | Tiled map | tiledMap() | tiled-map | tiled-map | canvas |
globe | Natural Earth land and borders on a sphere with optional points and routes. | globe() | globe | globe | webgl |
| Identifier | Canonical mode ID |
|---|---|
flowmap | flow-map |
geoheatmap | geo-heatmap |
map | map |
mapbubble | map-bubble |
mapline | map-line |
mappoint | map-point |
tiledwebmap | tiled-map |
Manual
ARIA · table fallbackCanvas ARIA metadata is paired with a text summary and table fallback.
standard · large · ultraStandard, large, and ultra profiles bound rendering work.