Graflume · Alpha
Candlestick · Extreme-environment application
Display open, high, low, close, and price direction for each period. Combine container size, input method, display capability, and user preference instead of guessing a device name. Compare mobile, watch, e-paper, monochrome, dot-matrix, and standards-based extreme environments on the same chart.
Chart family · Default families
Candlestick
Display open, high, low, close, and price direction for each period.
- Quick API
candlestick()- Browser snapshot
graflume- mark
candlestick- Presets
- 5
Extreme environments
Reconfigure for display, input, and device capability
Combine container size, input method, display capability, and user preference instead of guessing a device name. Compare mobile, watch, e-paper, monochrome, dot-matrix, and standards-based extreme environments on the same chart.
Fluid responsive
Reflow axes, legends, descriptions, and controls from the available container size.
960×540 · adaptive.profiles=responsive-fluidzoom-reflowshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
Mobile
Prioritize 44px touch targets, tap tooltips, and collapsed secondary information on a narrow portrait screen.
390×844 · adaptive.profiles=mobile-touchzoom-reflowcoarse-touchvirtual-keyboardshape-rectangledisplay-colorinput-coarsemotion-fullrenderer-canvas-spatial
Smartwatch
Keep essential marks, values, and stepped controls on a tiny or round screen, with the remaining detail reflowed below.
184×224 · adaptive.profiles=smartwatchzoom-reflowreduced-effectscoarse-touchlow-resourcecutout-roundshape-rounddisplay-colorinput-coarsemotion-reducedrenderer-canvas-spatialviewport-tiny
E-book and e-paper
Prefer stable frames, strong contrast, and the data table for low-refresh e-paper displays.
758×1024 · adaptive.profiles=ebook-paperprint-pagedreduced-effectslow-resourceshape-pageddisplay-e-inkinput-keyboardmotion-staticrenderer-canvas-spatial
Monochrome
Use strokes, markers, patterns, labels, and the table so color is never the only distinction.
640×400 · adaptive.profiles=monochromereduced-effectsshape-rectangledisplay-monochromeinput-finemotion-reducedrenderer-canvas-spatial
Dot-matrix display
Reduce decoration and mark density while using strong strokes, integer labels, and stepped zoom on a low-resolution display.
320×240 · adaptive.profiles=dot-matrixzoom-reflowreduced-effectskeyboard-switchlow-resourceshape-rectangledisplay-gridinput-keyboardmotion-staticrenderer-canvas-spatialviewport-tiny
400% zoom and reflow
Reflow prose to one dimension at the 320 CSS px equivalent while retaining chart-local zoom and pan.
320×480 · adaptive.profiles=zoom-reflowzoom-reflowshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
Foldable dual screen
Keep the chart and explanation in independent viewport segments without crossing the hinge.
720×640 · adaptive.profiles=foldable-dualfoldable-dualshape-dualdisplay-colorinput-finemotion-fullrenderer-canvas-spatial
TV and remote
Provide strong focus indication and D-pad, Enter, and Escape operation on a hoverless distance display.
1920×1080 · adaptive.profiles=tv-remotetv-remoteshape-rectangledisplay-colorinput-remotemotion-fullrenderer-canvas-spatial
Print and paged media
Pair a static chart with its description and table, hide controls, and avoid page breaks through the figure.
794×1123 · adaptive.profiles=print-pagedprint-pagedshape-pageddisplay-colorinput-finemotion-staticrenderer-canvas-spatial
Forced colors
Honor system colors and borders while retaining patterns, markers, and text as redundant cues.
640×400 · adaptive.profiles=forced-colorsforced-colorsshape-rectangledisplay-high-contrastinput-finemotion-fullrenderer-canvas-spatial
Reduced effects
Complete transitions immediately and use opaque surfaces and deferred work to reduce motion and transparency load.
640×400 · adaptive.profiles=reduced-effectsreduced-effectsshape-rectangledisplay-colorinput-finemotion-reducedrenderer-canvas-spatial
Coarse touch
Inspect values by tap without hover, keep targets at least 44px, and expose explicit zoom buttons.
390×844 · adaptive.profiles=coarse-touchcoarse-touchshape-rectangledisplay-colorinput-coarsemotion-fullrenderer-canvas-spatial
Keyboard and switch input
Reach every operation with Tab, arrows, Enter, Space, and Escape, with no drag-only action.
640×400 · adaptive.profiles=keyboard-switchkeyboard-switchshape-rectangledisplay-colorinput-keyboardmotion-fullrenderer-canvas-spatial
Low resource and slow network
Prefer progressive rendering, sampling, cancellable work, and a static fallback under constrained memory or connectivity.
640×400 · adaptive.profiles=low-resourcelow-resourceshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
RTL document
Follow RTL logical flow for prose and tabs while keeping axes, code, and data identifiers in technical LTR order.
640×400 · adaptive.profiles=rtlrtlshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
Vertical writing
Reflow vertical prose while keeping the chart and technical surfaces in an independent horizontal panel.
640×400 · adaptive.profiles=vertical-writingvertical-writingshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
Ultrawide and projection
Cap chart width instead of stretching indefinitely, using panelization and readable labels on ultrawide or projected surfaces.
1920×720 · adaptive.profiles=ultrawide-projectionultrawide-projectionshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
Screen reader and braille
Provide short and long descriptions, a semantic table, and status so Canvas or color is never the sole information path.
640×400 · adaptive.profiles=screenreader-braillescreenreader-brailleshape-nonvisualdisplay-colorinput-nonvisualmotion-fullrenderer-canvas-spatial
No scripting
A verified static preview, description, and collapsible row-data table preserve the essential information when scripting is unavailable.
640×400 · adaptive.profiles=no-scriptno-scriptshape-nonvisualdisplay-colorinput-finemotion-staticrenderer-static-fallback
XR and see-through display
Fall back safely to the ordinary 2D or WebGL panel when XR APIs are absent, duplicating depth cues in text and the table.
640×400 · adaptive.profiles=spatial-xrspatial-xrshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
Cutout and round display
Inset titles, marks, and controls around safe areas and round display bounds so they are not clipped.
184×224 · adaptive.profiles=cutout-roundcutout-roundshape-rounddisplay-colorinput-finemotion-fullrenderer-canvas-spatialviewport-tiny
Virtual keyboard viewport
Reflow focus controls, the chart, and the active explanation when a virtual keyboard reduces the visual viewport.
390×560 · adaptive.profiles=virtual-keyboardvirtual-keyboardshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
Extreme environment preview
Choose a profile above to preserve the same data and ChartSpec while reconfiguring the chart for display size, input method, display capability, and user preference.
StatusLoading
adaptivecapability-drivenno-user-agent-branching
- Legend:
legend · explicit · 2 channels - Point and range highlights:
highlights[] · datum · date - Custom callouts:
annotations[] · datum · date · callout · placement:auto - Interactive selection:
selection · multiple · toggle
Loading
Extreme environment preview · Row data
Row data and zero-copy TypedArray columns share one data contract.
datetemporal | closequantitative | openquantitative | highquantitative | lowquantitative |
|---|---|---|---|---|
| 2025-01-01 | 95.1 | 94 | 96.3 | 92.9 |
| 2025-01-02 | 96.4177 | 95.7997 | 97.6977 | 94.6097 |
| 2025-01-03 | 97.4641 | 97.3786 | 98.8241 | 96.0986 |
| 2025-01-04 | 98.1631 | 98.5624 | 100.0024 | 96.7931 |
| 2025-01-05 | 98.4747 | 99.2322 | 100.7522 | 97.3747 |
| 2025-01-06 | 98.3969 | 99.3404 | 100.5404 | 97.2069 |
| 2025-01-07 | 97.9643 | 98.9138 | 100.1938 | 96.6843 |
| 2025-01-08 | 97.2423 | 98.0461 | 99.4061 | 95.8723 |
| 2025-01-09 | 96.3192 | 96.8793 | 98.3193 | 95.2192 |
| 2025-01-10 | 95.296 | 95.5793 | 97.0993 | 94.106 |
| 2025-01-11 | 94.2766 | 94.3096 | 95.5096 | 92.9966 |
| 2025-01-12 | 93.3576 | 93.2092 | 94.6376 | 91.8392 |
| 2025-01-13 | 92.62 | 92.3761 | 93.98 | 91.2761 |
| 2025-01-14 | 92.1232 | 91.8609 | 93.5632 | 90.6709 |
| 2025-01-15 | 91.9016 | 91.669 | 93.4216 | 90.389 |
| 2025-01-16 | 91.9631 | 91.7703 | 93.1631 | 90.4003 |
| 2025-01-17 | 92.2911 | 92.1131 | 93.5711 | 91.0131 |
| 2025-01-18 | 92.8475 | 92.6392 | 94.2075 | 91.4492 |
| 2025-01-19 | 93.5779 | 93.2948 | 95.0179 | 92.0148 |
| 2025-01-20 | 94.4172 | 94.0373 | 95.9372 | 92.6673 |
| 2025-01-21 | 95.2956 | 94.8355 | 96.4956 | 93.7355 |
| 2025-01-22 | 96.1441 | 95.6643 | 97.4241 | 94.4743 |
| 2025-01-23 | 96.8995 | 96.4964 | 98.2595 | 95.2164 |
| 2025-01-24 | 97.5083 | 97.2947 | 98.9483 | 95.9247 |
| 2025-01-25 | 97.9299 | 98.0069 | 99.5269 | 96.8299 |
| 2025-01-26 | 98.1388 | 98.5662 | 99.7662 | 96.9488 |
| 2025-01-27 | 98.1252 | 98.8987 | 100.1787 | 96.8452 |
| 2025-01-28 | 97.8956 | 98.9355 | 100.2955 | 96.5256 |
| 2025-01-29 | 97.4723 | 98.6288 | 100.0688 | 96.3723 |
| 2025-01-30 | 96.8921 | 97.9675 | 99.4875 | 95.7021 |
| 2025-01-31 | 96.2043 | 96.9891 | 98.1891 | 94.9243 |
| 2025-02-01 | 95.4682 | 95.7827 | 97.0627 | 94.0982 |
| 2025-02-02 | 94.7495 | 94.4846 | 96.1095 | 93.3846 |
| 2025-02-03 | 94.1163 | 93.2624 | 95.5563 | 92.0724 |
| 2025-02-04 | 93.6345 | 92.2928 | 95.1545 | 91.0128 |
| 2025-02-05 | 93.3624 | 91.7342 | 94.5624 | 90.3642 |
| 2025-02-06 | 93.3458 | 91.7009 | 94.6258 | 90.6009 |
| 2025-02-07 | 93.6128 | 92.2427 | 94.9728 | 91.0527 |
| 2025-02-08 | 94.1706 | 93.3336 | 95.6106 | 92.0536 |
| 2025-02-09 | 95.0024 | 94.8731 | 96.5224 | 93.5031 |
| 2025-02-10 | 96.0672 | 96.6995 | 97.8995 | 94.9672 |
| 2025-02-11 | 97.3012 | 98.6132 | 99.8932 | 96.1112 |
| 2025-02-12 | 98.6223 | 100.4064 | 101.7664 | 97.3423 |
| 2025-02-13 | 99.9361 | 101.8939 | 103.3339 | 98.5661 |
| 2025-02-14 | 101.1441 | 102.9388 | 104.4588 | 100.0441 |
| 2025-02-15 | 102.1532 | 103.471 | 104.671 | 100.9632 |
| 2025-02-16 | 102.8851 | 103.493 | 104.773 | 101.6051 |
| 2025-02-17 | 103.2854 | 103.0745 | 104.6454 | 101.7045 |
| 2025-02-18 | 103.3306 | 102.3366 | 104.7706 | 101.2366 |
| 2025-02-19 | 103.0322 | 101.4292 | 104.5522 | 100.2392 |
| 2025-02-20 | 102.4378 | 100.506 | 103.6378 | 99.226 |
| 2025-02-21 | 101.6282 | 99.7023 | 102.9082 | 98.3323 |
| 2025-02-22 | 100.7105 | 99.1185 | 102.0705 | 98.0185 |
| 2025-02-23 | 99.8085 | 98.8127 | 101.2485 | 97.6227 |
| 2025-02-24 | 99.0497 | 98.801 | 100.5697 | 97.521 |
| 2025-02-25 | 98.5523 | 99.0666 | 100.2666 | 97.1823 |
| 2025-02-26 | 98.4121 | 99.5714 | 100.8514 | 97.3121 |
| 2025-02-27 | 98.6906 | 100.27 | 101.63 | 97.5006 |
| 2025-02-28 | 99.4076 | 101.1202 | 102.5602 | 98.1276 |
| 2025-03-01 | 100.5364 | 102.0882 | 103.6082 | 99.1664 |
| 2025-03-02 | 102.0054 | 103.1483 | 104.3483 | 100.9054 |
| 2025-03-03 | 103.704 | 104.2779 | 105.5579 | 102.514 |
| 2025-03-04 | 105.4928 | 105.4483 | 106.8528 | 104.1683 |
| 2025-03-05 | 107.218 | 106.617 | 108.658 | 105.247 |
Browser API · Portable schema
Browser API
Graflume.candlestick()
const data = [
{
"close": 95.1,
"date": "2025-01-01",
"high": 96.3,
"low": 92.9,
"open": 94,
"value": 95.1,
"volume": 1070
},
{
"close": 96.4177,
"date": "2025-01-02",
"high": 97.6977,
"low": 94.6097,
"open": 95.7997,
"value": 96.4177,
"volume": 1144
},
{
"close": 97.4641,
"date": "2025-01-03",
"high": 98.8241,
"low": 96.0986,
"open": 97.3786,
"value": 97.4641,
"volume": 1217
},
{
"close": 98.1631,
"date": "2025-01-04",
"high": 100.0024,
"low": 96.7931,
"open": 98.5624,
"value": 98.1631,
"volume": 1287
},
{
"close": 98.4747,
"date": "2025-01-05",
"high": 100.7522,
"low": 97.3747,
"open": 99.2322,
"value": 98.4747,
"volume": 1353
},
{
"close": 98.3969,
"date": "2025-01-06",
"high": 100.5404,
"low": 97.2069,
"open": 99.3404,
"value": 98.3969,
"volume": 1415
},
{
"close": 97.9643,
"date": "2025-01-07",
"high": 100.1938,
"low": 96.6843,
"open": 98.9138,
"value": 97.9643,
"volume": 1470
},
{
"close": 97.2423,
"date": "2025-01-08",
"high": 99.4061,
"low": 95.8723,
"open": 98.0461,
"value": 97.2423,
"volume": 1519
},
{
"close": 96.3192,
"date": "2025-01-09",
"high": 98.3193,
"low": 95.2192,
"open": 96.8793,
"value": 96.3192,
"volume": 1562
},
{
"close": 95.296,
"date": "2025-01-10",
"high": 97.0993,
"low": 94.106,
"open": 95.5793,
"value": 95.296,
"volume": 1598
},
{
"close": 94.2766,
"date": "2025-01-11",
"high": 95.5096,
"low": 92.9966,
"open": 94.3096,
"value": 94.2766,
"volume": 1629
},
{
"close": 93.3576,
"date": "2025-01-12",
"high": 94.6376,
"low": 91.8392,
"open": 93.2092,
"value": 93.3576,
"volume": 1656
},
{
"close": 92.62,
"date": "2025-01-13",
"high": 93.98,
"low": 91.2761,
"open": 92.3761,
"value": 92.62,
"volume": 1679
},
{
"close": 92.1232,
"date": "2025-01-14",
"high": 93.5632,
"low": 90.6709,
"open": 91.8609,
"value": 92.1232,
"volume": 1699
},
{
"close": 91.9016,
"date": "2025-01-15",
"high": 93.4216,
"low": 90.389,
"open": 91.669,
"value": 91.9016,
"volume": 1106
},
{
"close": 91.9631,
"date": "2025-01-16",
"high": 93.1631,
"low": 90.4003,
"open": 91.7703,
"value": 91.9631,
"volume": 1126
},
{
"close": 92.2911,
"date": "2025-01-17",
"high": 93.5711,
"low": 91.0131,
"open": 92.1131,
"value": 92.2911,
"volume": 1147
},
{
"close": 92.8475,
"date": "2025-01-18",
"high": 94.2075,
"low": 91.4492,
"open": 92.6392,
"value": 92.8475,
"volume": 1173
},
{
"close": 93.5779,
"date": "2025-01-19",
"high": 95.0179,
"low": 92.0148,
"open": 93.2948,
"value": 93.5779,
"volume": 1202
},
{
"close": 94.4172,
"date": "2025-01-20",
"high": 95.9372,
"low": 92.6673,
"open": 94.0373,
"value": 94.4172,
"volume": 1237
},
{
"close": 95.2956,
"date": "2025-01-21",
"high": 96.4956,
"low": 93.7355,
"open": 94.8355,
"value": 95.2956,
"volume": 1278
},
{
"close": 96.1441,
"date": "2025-01-22",
"high": 97.4241,
"low": 94.4743,
"open": 95.6643,
"value": 96.1441,
"volume": 1325
},
{
"close": 96.8995,
"date": "2025-01-23",
"high": 98.2595,
"low": 95.2164,
"open": 96.4964,
"value": 96.8995,
"volume": 1378
},
{
"close": 97.5083,
"date": "2025-01-24",
"high": 98.9483,
"low": 95.9247,
"open": 97.2947,
"value": 97.5083,
"volume": 1437
},
{
"close": 97.9299,
"date": "2025-01-25",
"high": 99.5269,
"low": 96.8299,
"open": 98.0069,
"value": 97.9299,
"volume": 1502
},
{
"close": 98.1388,
"date": "2025-01-26",
"high": 99.7662,
"low": 96.9488,
"open": 98.5662,
"value": 98.1388,
"volume": 1571
},
{
"close": 98.1252,
"date": "2025-01-27",
"high": 100.1787,
"low": 96.8452,
"open": 98.8987,
"value": 98.1252,
"volume": 1643
},
{
"close": 97.8956,
"date": "2025-01-28",
"high": 100.2955,
"low": 96.5256,
"open": 98.9355,
"value": 97.8956,
"volume": 1104
},
{
"close": 97.4723,
"date": "2025-01-29",
"high": 100.0688,
"low": 96.3723,
"open": 98.6288,
"value": 97.4723,
"volume": 1179
},
{
"close": 96.8921,
"date": "2025-01-30",
"high": 99.4875,
"low": 95.7021,
"open": 97.9675,
"value": 96.8921,
"volume": 1252
},
{
"close": 96.2043,
"date": "2025-01-31",
"high": 98.1891,
"low": 94.9243,
"open": 96.9891,
"value": 96.2043,
"volume": 1323
},
{
"close": 95.4682,
"date": "2025-02-01",
"high": 97.0627,
"low": 94.0982,
"open": 95.7827,
"value": 95.4682,
"volume": 1391
},
{
"close": 94.7495,
"date": "2025-02-02",
"high": 96.1095,
"low": 93.3846,
"open": 94.4846,
"value": 94.7495,
"volume": 1454
},
{
"close": 94.1163,
"date": "2025-02-03",
"high": 95.5563,
"low": 92.0724,
"open": 93.2624,
"value": 94.1163,
"volume": 1511
},
{
"close": 93.6345,
"date": "2025-02-04",
"high": 95.1545,
"low": 91.0128,
"open": 92.2928,
"value": 93.6345,
"volume": 1562
},
{
"close": 93.3624,
"date": "2025-02-05",
"high": 94.5624,
"low": 90.3642,
"open": 91.7342,
"value": 93.3624,
"volume": 1607
},
{
"close": 93.3458,
"date": "2025-02-06",
"high": 94.6258,
"low": 90.6009,
"open": 91.7009,
"value": 93.3458,
"volume": 1645
},
{
"close": 93.6128,
"date": "2025-02-07",
"high": 94.9728,
"low": 91.0527,
"open": 92.2427,
"value": 93.6128,
"volume": 1678
},
{
"close": 94.1706,
"date": "2025-02-08",
"high": 95.6106,
"low": 92.0536,
"open": 93.3336,
"value": 94.1706,
"volume": 1706
},
{
"close": 95.0024,
"date": "2025-02-09",
"high": 96.5224,
"low": 93.5031,
"open": 94.8731,
"value": 95.0024,
"volume": 1730
},
{
"close": 96.0672,
"date": "2025-02-10",
"high": 97.8995,
"low": 94.9672,
"open": 96.6995,
"value": 96.0672,
"volume": 1138
},
{
"close": 97.3012,
"date": "2025-02-11",
"high": 99.8932,
"low": 96.1112,
"open": 98.6132,
"value": 97.3012,
"volume": 1157
},
{
"close": 98.6223,
"date": "2025-02-12",
"high": 101.7664,
"low": 97.3423,
"open": 100.4064,
"value": 98.6223,
"volume": 1177
},
{
"close": 99.9361,
"date": "2025-02-13",
"high": 103.3339,
"low": 98.5661,
"open": 101.8939,
"value": 99.9361,
"volume": 1198
},
{
"close": 101.1441,
"date": "2025-02-14",
"high": 104.4588,
"low": 100.0441,
"open": 102.9388,
"value": 101.1441,
"volume": 1222
},
{
"close": 102.1532,
"date": "2025-02-15",
"high": 104.671,
"low": 100.9632,
"open": 103.471,
"value": 102.1532,
"volume": 1250
},
{
"close": 102.8851,
"date": "2025-02-16",
"high": 104.773,
"low": 101.6051,
"open": 103.493,
"value": 102.8851,
"volume": 1283
},
{
"close": 103.2854,
"date": "2025-02-17",
"high": 104.6454,
"low": 101.7045,
"open": 103.0745,
"value": 103.2854,
"volume": 1322
},
{
"close": 103.3306,
"date": "2025-02-18",
"high": 104.7706,
"low": 101.2366,
"open": 102.3366,
"value": 103.3306,
"volume": 1367
},
{
"close": 103.0322,
"date": "2025-02-19",
"high": 104.5522,
"low": 100.2392,
"open": 101.4292,
"value": 103.0322,
"volume": 1418
},
{
"close": 102.4378,
"date": "2025-02-20",
"high": 103.6378,
"low": 99.226,
"open": 100.506,
"value": 102.4378,
"volume": 1476
},
{
"close": 101.6282,
"date": "2025-02-21",
"high": 102.9082,
"low": 98.3323,
"open": 99.7023,
"value": 101.6282,
"volume": 1539
},
{
"close": 100.7105,
"date": "2025-02-22",
"high": 102.0705,
"low": 98.0185,
"open": 99.1185,
"value": 100.7105,
"volume": 1607
},
{
"close": 99.8085,
"date": "2025-02-23",
"high": 101.2485,
"low": 97.6227,
"open": 98.8127,
"value": 99.8085,
"volume": 1065
},
{
"close": 99.0497,
"date": "2025-02-24",
"high": 100.5697,
"low": 97.521,
"open": 98.801,
"value": 99.0497,
"volume": 1138
},
{
"close": 98.5523,
"date": "2025-02-25",
"high": 100.2666,
"low": 97.1823,
"open": 99.0666,
"value": 98.5523,
"volume": 1213
},
{
"close": 98.4121,
"date": "2025-02-26",
"high": 100.8514,
"low": 97.3121,
"open": 99.5714,
"value": 98.4121,
"volume": 1287
},
{
"close": 98.6906,
"date": "2025-02-27",
"high": 101.63,
"low": 97.5006,
"open": 100.27,
"value": 98.6906,
"volume": 1359
},
{
"close": 99.4076,
"date": "2025-02-28",
"high": 102.5602,
"low": 98.1276,
"open": 101.1202,
"value": 99.4076,
"volume": 1428
},
{
"close": 100.5364,
"date": "2025-03-01",
"high": 103.6082,
"low": 99.1664,
"open": 102.0882,
"value": 100.5364,
"volume": 1492
},
{
"close": 102.0054,
"date": "2025-03-02",
"high": 104.3483,
"low": 100.9054,
"open": 103.1483,
"value": 102.0054,
"volume": 1551
},
{
"close": 103.704,
"date": "2025-03-03",
"high": 105.5579,
"low": 102.514,
"open": 104.2779,
"value": 103.704,
"volume": 1604
},
{
"close": 105.4928,
"date": "2025-03-04",
"high": 106.8528,
"low": 104.1683,
"open": 105.4483,
"value": 105.4928,
"volume": 1651
},
{
"close": 107.218,
"date": "2025-03-05",
"high": 108.658,
"low": 105.247,
"open": 106.617,
"value": 107.218,
"volume": 1692
}
];
const options = {
"accessibility": {
"description": "A coherent daily market path with open, high, low, close, and volume. The example uses curated, deterministic data and exposes its exact values in a semantic table.",
"label": "Candlestick chart: A coherent daily market path with open, high, low, close, and 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": "date",
"type": "datum",
"value": "2025-02-02"
},
"text": "Point and range highlights · 2025-02-02"
}
],
"axes": {
"x": {
"format": {
"dateStyle": "short",
"timeZone": "UTC",
"type": "date"
},
"ticks": {
"count": 4,
"spacing": 8
}
},
"y": {
"format": {
"currency": "USD",
"currencyDisplay": "narrowSymbol",
"fractionDigits": 0,
"type": "currency"
}
}
},
"create": {
"adaptive": {
"profiles": "auto"
}
},
"height": 620,
"highlights": [
{
"id": "manual-focus",
"padding": 7,
"target": {
"field": "date",
"type": "datum",
"value": "2025-02-02"
}
}
],
"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": true,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"playback": {
"autoplay": false,
"field": "date",
"filter": true,
"interval": 1000,
"key": "date",
"loop": false,
"mode": "cumulative",
"rate": 1,
"transition": {
"duration": 600,
"easing": "ease-in-out"
},
"windowSize": 1
},
"selection": {
"ariaLabel": "Interactive selection",
"clearOnBackground": true,
"clearOnEscape": true,
"highlight": {
"padding": 5
},
"key": "date",
"mode": "multiple",
"toggle": true
},
"tooltip": {
"axis": "x",
"fields": [
{
"dateStyle": "long",
"field": "date",
"format": "date",
"label": "Date",
"timeZone": "UTC"
},
{
"field": "close",
"format": "number",
"label": "Close"
},
{
"field": "open",
"format": "number",
"label": "Open"
},
{
"field": "high",
"format": "number",
"label": "High"
},
{
"field": "low",
"format": "number",
"label": "Low"
}
],
"title": "Candlestick",
"trigger": "axis"
}
},
"legend": {
"interactive": false,
"items": [
{
"id": "semantic-0",
"label": "Rising"
},
{
"id": "semantic-1",
"label": "Falling"
}
],
"labels": {
"hide": "Hide",
"show": "Show"
},
"maxItems": 8,
"mode": "layers",
"orientation": "horizontal",
"position": "bottom",
"title": "Candlestick",
"visible": true
},
"locale": "en",
"mark": {
"fields": {
"close": "close",
"high": "high",
"low": "low",
"open": "open"
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "A coherent daily market path with open, high, low, close, and volume",
"text": "Candlestick chart"
},
"width": "container",
"x": {
"field": "date",
"scale": {
"domain": [
"2026-01-01",
"2026-04-01"
]
},
"title": "Trading day",
"type": "temporal"
},
"y": {
"field": "close",
"scale": {
"domain": [
18,
38
]
},
"title": "Price",
"type": "quantitative"
}
};
Graflume.candlestick('#chart', data, options);Portable schema
ChartSpec 0.1 · options
{
"accessibility": {
"description": "A coherent daily market path with open, high, low, close, and volume. The example uses curated, deterministic data and exposes its exact values in a semantic table.",
"label": "Candlestick chart: A coherent daily market path with open, high, low, close, and 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": "date",
"type": "datum",
"value": "2025-02-02"
},
"text": "Point and range highlights · 2025-02-02"
}
],
"axes": {
"x": {
"format": {
"dateStyle": "short",
"timeZone": "UTC",
"type": "date"
},
"ticks": {
"count": 4,
"spacing": 8
}
},
"y": {
"format": {
"currency": "USD",
"currencyDisplay": "narrowSymbol",
"fractionDigits": 0,
"type": "currency"
}
}
},
"create": {
"adaptive": {
"profiles": "auto"
}
},
"height": 620,
"highlights": [
{
"id": "manual-focus",
"padding": 7,
"target": {
"field": "date",
"type": "datum",
"value": "2025-02-02"
}
}
],
"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": true,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"playback": {
"autoplay": false,
"field": "date",
"filter": true,
"interval": 1000,
"key": "date",
"loop": false,
"mode": "cumulative",
"rate": 1,
"transition": {
"duration": 600,
"easing": "ease-in-out"
},
"windowSize": 1
},
"selection": {
"ariaLabel": "Interactive selection",
"clearOnBackground": true,
"clearOnEscape": true,
"highlight": {
"padding": 5
},
"key": "date",
"mode": "multiple",
"toggle": true
},
"tooltip": {
"axis": "x",
"fields": [
{
"dateStyle": "long",
"field": "date",
"format": "date",
"label": "Date",
"timeZone": "UTC"
},
{
"field": "close",
"format": "number",
"label": "Close"
},
{
"field": "open",
"format": "number",
"label": "Open"
},
{
"field": "high",
"format": "number",
"label": "High"
},
{
"field": "low",
"format": "number",
"label": "Low"
}
],
"title": "Candlestick",
"trigger": "axis"
}
},
"legend": {
"interactive": false,
"items": [
{
"id": "semantic-0",
"label": "Rising"
},
{
"id": "semantic-1",
"label": "Falling"
}
],
"labels": {
"hide": "Hide",
"show": "Show"
},
"maxItems": 8,
"mode": "layers",
"orientation": "horizontal",
"position": "bottom",
"title": "Candlestick",
"visible": true
},
"locale": "en",
"mark": {
"fields": {
"close": "close",
"high": "high",
"low": "low",
"open": "open"
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "A coherent daily market path with open, high, low, close, and volume",
"text": "Candlestick chart"
},
"width": "container",
"x": {
"field": "date",
"scale": {
"domain": [
"2026-01-01",
"2026-04-01"
]
},
"title": "Trading day",
"type": "temporal"
},
"y": {
"field": "close",
"scale": {
"domain": [
18,
38
]
},
"title": "Price",
"type": "quantitative"
}
}