Charts · Bars
CandlestickChart
| time | open | high | low | close |
|---|---|---|---|---|
| Mon | 102 | 108 | 99 | 106 |
| Tue | 106 | 109 | 101 | 103 |
| Wed | 103 | 105 | 97 | 99 |
| Thu | 99 | 104 | 96 | 103 |
| Fri | 103 | 111 | 102 | 110 |
| Mon | 110 | 114 | 107 | 108 |
| Tue | 108 | 110 | 104 | 109 |
| Wed | 109 | 116 | 108 | 115 |
| time | open | high | low | close |
|---|---|---|---|---|
| Mon | 102 | 108 | 99 | 106 |
| Tue | 106 | 109 | 101 | 103 |
| Wed | 103 | 105 | 97 | 99 |
| Thu | 99 | 104 | 96 | 103 |
| Fri | 103 | 111 | 102 | 110 |
| Mon | 110 | 114 | 107 | 108 |
| Tue | 108 | 110 | 104 | 109 |
| Wed | 109 | 116 | 108 | 115 |
| time | open | high | low | close |
|---|---|---|---|---|
| Mon | 102 | 108 | 99 | 106 |
| Tue | 106 | 109 | 101 | 103 |
| Wed | 103 | 105 | 97 | 99 |
| Thu | 99 | 104 | 96 | 103 |
| Fri | 103 | 111 | 102 | 110 |
| Mon | 110 | 114 | 107 | 108 |
| Tue | 108 | 110 | 104 | 109 |
| Wed | 109 | 116 | 108 | 115 |
| time | open | high | low | close |
|---|---|---|---|---|
| Mon | 102 | 108 | 99 | 106 |
| Tue | 106 | 109 | 101 | 103 |
| Wed | 103 | 105 | 97 | 99 |
| Thu | 99 | 104 | 96 | 103 |
| Fri | 103 | 111 | 102 | 110 |
| Mon | 110 | 114 | 107 | 108 |
| Tue | 108 | 110 | 104 | 109 |
| Wed | 109 | 116 | 108 | 115 |
Example
The chart above, in each framework. Pick a framework once and every example on the site follows it.
npm install @silverpoint/react @silverpoint/grounds @silverpoint/fontsimport '@silverpoint/fonts/fonts.css';
import '@silverpoint/grounds/styles.css';
import { CandlestickChart } from '@silverpoint/react/candlestick-chart';
const data = [
{ time: 'Mon', open: 102, high: 108, low: 99, close: 106 },
{ time: 'Tue', open: 106, high: 109, low: 101, close: 103 },
{ time: 'Wed', open: 103, high: 105, low: 97, close: 99 },
{ time: 'Thu', open: 99, high: 104, low: 96, close: 103 },
{ time: 'Fri', open: 103, high: 111, low: 102, close: 110 },
{ time: 'Mon', open: 110, high: 114, low: 107, close: 108 },
{ time: 'Tue', open: 108, high: 110, low: 104, close: 109 },
{ time: 'Wed', open: 109, high: 116, low: 108, close: 115 },
];
export default function App() {
return (
<div style={{ width: 480 }}>
<CandlestickChart
data={data}
timeKey="time"
openKey="open"
highKey="high"
lowKey="low"
closeKey="close"
title="Share price"
/>
</div>
);
}npm install @silverpoint/vue @silverpoint/grounds @silverpoint/fonts<script setup lang="ts">
import '@silverpoint/fonts/fonts.css';
import '@silverpoint/grounds/styles.css';
import { SpCandlestickChart } from '@silverpoint/vue/candlestick-chart';
const data = [
{ time: 'Mon', open: 102, high: 108, low: 99, close: 106 },
{ time: 'Tue', open: 106, high: 109, low: 101, close: 103 },
{ time: 'Wed', open: 103, high: 105, low: 97, close: 99 },
{ time: 'Thu', open: 99, high: 104, low: 96, close: 103 },
{ time: 'Fri', open: 103, high: 111, low: 102, close: 110 },
{ time: 'Mon', open: 110, high: 114, low: 107, close: 108 },
{ time: 'Tue', open: 108, high: 110, low: 104, close: 109 },
{ time: 'Wed', open: 109, high: 116, low: 108, close: 115 },
];
</script>
<template>
<div style="width: 480px">
<SpCandlestickChart
:data="data"
time-key="time"
open-key="open"
high-key="high"
low-key="low"
close-key="close"
title="Share price"
/>
</div>
</template>npm install @silverpoint/angular @silverpoint/grounds @silverpoint/fonts// src/styles.css:
// @import '@silverpoint/fonts/fonts.css';
// @import '@silverpoint/grounds/styles.css';
import { Component } from '@angular/core';
import { SpCandlestickChart } from '@silverpoint/angular/candlestick-chart';
@Component({
selector: 'app-root',
imports: [SpCandlestickChart],
template: `
<div style="width: 480px">
<sp-candlestick-chart
[data]="data"
timeKey="time"
openKey="open"
highKey="high"
lowKey="low"
closeKey="close"
title="Share price"
/>
</div>
`,
})
export class App {
protected readonly data = [
{ time: 'Mon', open: 102, high: 108, low: 99, close: 106 },
{ time: 'Tue', open: 106, high: 109, low: 101, close: 103 },
{ time: 'Wed', open: 103, high: 105, low: 97, close: 99 },
{ time: 'Thu', open: 99, high: 104, low: 96, close: 103 },
{ time: 'Fri', open: 103, high: 111, low: 102, close: 110 },
{ time: 'Mon', open: 110, high: 114, low: 107, close: 108 },
{ time: 'Tue', open: 108, high: 110, low: 104, close: 109 },
{ time: 'Wed', open: 109, high: 116, low: 108, close: 115 },
];
}pip install reflex-silverpoint-reactimport reflex as rx
from reflex_silverpoint_react import candlestick_chart
DATA = [
{"time": "Mon", "open": 102, "high": 108, "low": 99, "close": 106},
{"time": "Tue", "open": 106, "high": 109, "low": 101, "close": 103},
{"time": "Wed", "open": 103, "high": 105, "low": 97, "close": 99},
{"time": "Thu", "open": 99, "high": 104, "low": 96, "close": 103},
{"time": "Fri", "open": 103, "high": 111, "low": 102, "close": 110},
{"time": "Mon", "open": 110, "high": 114, "low": 107, "close": 108},
{"time": "Tue", "open": 108, "high": 110, "low": 104, "close": 109},
{"time": "Wed", "open": 109, "high": 116, "low": 108, "close": 115},
]
def index() -> rx.Component:
return rx.box(
candlestick_chart(
data=DATA,
time_key="time",
open_key="open",
high_key="high",
low_key="low",
close_key="close",
title="Share price",
),
width="480px",
)
app = rx.App()
app.add_page(index)Import
Each chart has its own subpath, so a bundle only carries the charts it uses. Every adapter also exports every chart from its barrel.
| Framework | Import |
|---|---|
| React | import { CandlestickChart } from '@silverpoint/react/candlestick-chart'; |
| Vue | import { SpCandlestickChart } from '@silverpoint/vue/candlestick-chart'; |
| Angular | import { SpCandlestickChart } from '@silverpoint/angular/candlestick-chart'; // <sp-candlestick-chart> |
| Reflex | from reflex_silverpoint_react import candlestick_chart |
Props
The props CandlestickChart adds to the ones every chart takes. Accessor props (…Key, keys, names) name fields of your rows and are ignored without data.
| React / Angular | Vue | Reflex | Type | Description |
|---|---|---|---|---|
timeKey | time-key | time_key | Accessor<string | number> | — |
openKey | open-key | open_key | Accessor<number | null | undefined> | — |
highKey | high-key | high_key | Accessor<number | null | undefined> | — |
lowKey | low-key | low_key | Accessor<number | null | undefined> | — |
closeKey | close-key | close_key | Accessor<number | null | undefined> | — |
bounds | bounds | bounds | readonly [number, number] | Price bounds of the scale; derived from the data when omitted (REQ-097). |
Common props
Every chart also takes these. Framework conventions: camelCase in React and Angular, kebab-case in Vue templates, snake_case in Reflex. Read more about them.
Show the 22 common props
| React / Angular | Vue | Reflex | Type | Description |
|---|---|---|---|---|
data | data | data | readonly Datum[] | Rows to draw. If omitted, the demo dataset is rendered (REQ-093) and the accessor props (…_key, keys, names) are ignored. |
ground | ground | ground | GroundRef | Style ground: silverpoint or cyanotype, or a ground object. Defaults to the app provider's, or silverpoint. |
substrate | substrate | substrate | SubstrateName | Prepared substrate within the ground (REQ-046). |
mode | mode | mode | InkMode | ink by default; precision disables inking (REQ-021). |
seed | seed | seed | Seed | Seed. If omitted, it is derived from id stably (REQ-003). |
id | id | id | string | Stable identifier. If omitted, it is generated deterministically. |
height | height | height | number | Height of the drawing area in px. Width is the container's unless pinned. |
width | width | width | number | — |
chrome | chrome | chrome | 'card' | 'bare' | card draws the full frame; bare only the drawing area (REQ-095). |
hatchFill | hatch-fill | hatch_fill | 'tile' | 'per-shape' | How areas are filled (REQ-029). |
title | title | title | string | — |
badge | badge | badge | string | — |
value | value | value | string | number | — |
unit | unit | unit | string | — |
footerLeft | footer-left | footer_left | string | — |
footerRight | footer-right | footer_right | string | — |
label | label | label | string | Accessible name. If omitted, it is derived from title (REQ-120). |
description | description | description | string | Long description for screen readers (REQ-120). |
dataTable | data-table | data_table | 'visible' | 'hidden' | 'none' | Tabular alternative; hidden leaves it for assistive technology only (REQ-121). |
locale | locale | locale | string | — |
numberFormat | number-format | number_format | Intl.NumberFormatOptions | — |
className | class-name | class_name | string | — |
Events
Pointer and keyboard exploration are built in. The item under the pointer or focus is reported, and a click, Enter or Space selects it. The item is { seriesKey, index, datum, value, point: { x, y } }.
| Framework | Active item | Selection | Custom readout |
|---|---|---|---|
| React | onActiveChange | onSelect | tooltip={(item, readout) => …} |
| Vue | @active-change | @select | <template #tooltip> |
| Angular | (activeChange) | (select) | <ng-template spTooltip> |
| Reflex | on_active_change | on_select | tooltip=tooltip_template(…) |