Charts · Lines
LineChart
Spline with an optional dotted baseline series. Family: Lines · chart 1 of 60.
| hour | hits | baseline |
|---|---|---|
| 00 | 18 | 22 |
| 02 | 14 | 18 |
| 04 | 11 | 15 |
| 06 | 16 | 17 |
| 08 | 34 | 30 |
| 10 | 58 | 48 |
| 12 | 71 | 60 |
| 14 | 66 | 62 |
| 16 | 74 | 64 |
| 18 | 88 | 70 |
| 20 | 62 | 55 |
| 22 | 41 | 40 |
| hour | hits | baseline |
|---|---|---|
| 00 | 18 | 22 |
| 02 | 14 | 18 |
| 04 | 11 | 15 |
| 06 | 16 | 17 |
| 08 | 34 | 30 |
| 10 | 58 | 48 |
| 12 | 71 | 60 |
| 14 | 66 | 62 |
| 16 | 74 | 64 |
| 18 | 88 | 70 |
| 20 | 62 | 55 |
| 22 | 41 | 40 |
| hour | hits | baseline |
|---|---|---|
| 00 | 18 | 22 |
| 02 | 14 | 18 |
| 04 | 11 | 15 |
| 06 | 16 | 17 |
| 08 | 34 | 30 |
| 10 | 58 | 48 |
| 12 | 71 | 60 |
| 14 | 66 | 62 |
| 16 | 74 | 64 |
| 18 | 88 | 70 |
| 20 | 62 | 55 |
| 22 | 41 | 40 |
| hour | hits | baseline |
|---|---|---|
| 00 | 18 | 22 |
| 02 | 14 | 18 |
| 04 | 11 | 15 |
| 06 | 16 | 17 |
| 08 | 34 | 30 |
| 10 | 58 | 48 |
| 12 | 71 | 60 |
| 14 | 66 | 62 |
| 16 | 74 | 64 |
| 18 | 88 | 70 |
| 20 | 62 | 55 |
| 22 | 41 | 40 |
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 { LineChart } from '@silverpoint/react/line-chart';
const data = [
{ hour: '00', hits: 18, baseline: 22 },
{ hour: '02', hits: 14, baseline: 18 },
{ hour: '04', hits: 11, baseline: 15 },
{ hour: '06', hits: 16, baseline: 17 },
{ hour: '08', hits: 34, baseline: 30 },
{ hour: '10', hits: 58, baseline: 48 },
{ hour: '12', hits: 71, baseline: 60 },
{ hour: '14', hits: 66, baseline: 62 },
{ hour: '16', hits: 74, baseline: 64 },
{ hour: '18', hits: 88, baseline: 70 },
{ hour: '20', hits: 62, baseline: 55 },
{ hour: '22', hits: 41, baseline: 40 },
];
export default function App() {
return (
<div style={{ width: 480 }}>
<LineChart
data={data}
xKey="hour"
valueKey="hits"
secondaryKey="baseline"
title="Hits per hour"
unit="hits"
/>
</div>
);
}npm install @silverpoint/vue @silverpoint/grounds @silverpoint/fonts<script setup lang="ts">
import '@silverpoint/fonts/fonts.css';
import '@silverpoint/grounds/styles.css';
import { SpLineChart } from '@silverpoint/vue/line-chart';
const data = [
{ hour: '00', hits: 18, baseline: 22 },
{ hour: '02', hits: 14, baseline: 18 },
{ hour: '04', hits: 11, baseline: 15 },
{ hour: '06', hits: 16, baseline: 17 },
{ hour: '08', hits: 34, baseline: 30 },
{ hour: '10', hits: 58, baseline: 48 },
{ hour: '12', hits: 71, baseline: 60 },
{ hour: '14', hits: 66, baseline: 62 },
{ hour: '16', hits: 74, baseline: 64 },
{ hour: '18', hits: 88, baseline: 70 },
{ hour: '20', hits: 62, baseline: 55 },
{ hour: '22', hits: 41, baseline: 40 },
];
</script>
<template>
<div style="width: 480px">
<SpLineChart
:data="data"
x-key="hour"
value-key="hits"
secondary-key="baseline"
title="Hits per hour"
unit="hits"
/>
</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 { SpLineChart } from '@silverpoint/angular/line-chart';
@Component({
selector: 'app-root',
imports: [SpLineChart],
template: `
<div style="width: 480px">
<sp-line-chart
[data]="data"
xKey="hour"
valueKey="hits"
secondaryKey="baseline"
title="Hits per hour"
unit="hits"
/>
</div>
`,
})
export class App {
protected readonly data = [
{ hour: '00', hits: 18, baseline: 22 },
{ hour: '02', hits: 14, baseline: 18 },
{ hour: '04', hits: 11, baseline: 15 },
{ hour: '06', hits: 16, baseline: 17 },
{ hour: '08', hits: 34, baseline: 30 },
{ hour: '10', hits: 58, baseline: 48 },
{ hour: '12', hits: 71, baseline: 60 },
{ hour: '14', hits: 66, baseline: 62 },
{ hour: '16', hits: 74, baseline: 64 },
{ hour: '18', hits: 88, baseline: 70 },
{ hour: '20', hits: 62, baseline: 55 },
{ hour: '22', hits: 41, baseline: 40 },
];
}pip install reflex-silverpoint-reactimport reflex as rx
from reflex_silverpoint_react import line_chart
DATA = [
{"hour": "00", "hits": 18, "baseline": 22},
{"hour": "02", "hits": 14, "baseline": 18},
{"hour": "04", "hits": 11, "baseline": 15},
{"hour": "06", "hits": 16, "baseline": 17},
{"hour": "08", "hits": 34, "baseline": 30},
{"hour": "10", "hits": 58, "baseline": 48},
{"hour": "12", "hits": 71, "baseline": 60},
{"hour": "14", "hits": 66, "baseline": 62},
{"hour": "16", "hits": 74, "baseline": 64},
{"hour": "18", "hits": 88, "baseline": 70},
{"hour": "20", "hits": 62, "baseline": 55},
{"hour": "22", "hits": 41, "baseline": 40},
]
def index() -> rx.Component:
return rx.box(
line_chart(
data=DATA,
x_key="hour",
value_key="hits",
secondary_key="baseline",
title="Hits per hour",
unit="hits",
),
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 { LineChart } from '@silverpoint/react/line-chart'; |
| Vue | import { SpLineChart } from '@silverpoint/vue/line-chart'; |
| Angular | import { SpLineChart } from '@silverpoint/angular/line-chart'; // <sp-line-chart> |
| Reflex | from reflex_silverpoint_react import line_chart |
Props
The props LineChart 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 |
|---|---|---|---|---|
xKey | x-key | x_key | Accessor<string | number> | — |
valueKey | value-key | value_key | Accessor<number | null | undefined> | — |
secondaryKey | secondary-key | secondary_key | Accessor<number | null | undefined> | — |
curve | curve | curve | LineCurve | — |
series | series | series | 'all' | 'primary' | all draws the secondary series when there is one; primary omits it. |
connectNulls | connect-nulls | connect_nulls | boolean | Whether a gap left by a missing value is bridged (REQ-008). |
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(…) |
Report it
Found something wrong with LineChart? Open an issue on GitHub — the form comes pre-filled with the chart and the version.