Skip to content
silverpoint
Documentation menu

Charts · Distributions & comparisons

EcdfChart

The empirical cumulative distribution as a step function. Family: Distributions & comparisons · chart 35 of 60.
Reading time by deviceReading time by device
Reading time by device
minutesdesktopphone
11.1%2.6%
1.54.5%6.6%
211.4%11.8%
2.513.6%15.8%
317%25%
3.522.7%30.3%
430.7%38.2%
4.535.2%45.4%
540.9%52%
5.543.2%55.9%
648.9%61.2%
6.554.5%65.1%
754.5%67.1%
7.558%69.1%
862.5%71.7%
8.564.8%75%
967%78.3%
9.570.5%80.9%
1070.5%84.2%
10.572.7%86.8%
1173.9%89.5%
11.573.9%93.4%
1278.4%94.1%
12.579.5%94.7%
1380.7%95.4%
13.583%95.4%
1485.2%96.1%
14.586.4%96.7%
1587.5%97.4%
15.588.6%98%
16.590.9%98%
1790.9%99.3%
1892%99.3%
18.593.2%99.3%
19.594.3%99.3%
2095.5%99.3%
21.596.6%100%
23.597.7%100%
2798.9%100%
27.5100%100%
Reading time by deviceReading time by device
Reading time by device
minutesdesktopphone
11.1%2.6%
1.54.5%6.6%
211.4%11.8%
2.513.6%15.8%
317%25%
3.522.7%30.3%
430.7%38.2%
4.535.2%45.4%
540.9%52%
5.543.2%55.9%
648.9%61.2%
6.554.5%65.1%
754.5%67.1%
7.558%69.1%
862.5%71.7%
8.564.8%75%
967%78.3%
9.570.5%80.9%
1070.5%84.2%
10.572.7%86.8%
1173.9%89.5%
11.573.9%93.4%
1278.4%94.1%
12.579.5%94.7%
1380.7%95.4%
13.583%95.4%
1485.2%96.1%
14.586.4%96.7%
1587.5%97.4%
15.588.6%98%
16.590.9%98%
1790.9%99.3%
1892%99.3%
18.593.2%99.3%
19.594.3%99.3%
2095.5%99.3%
21.596.6%100%
23.597.7%100%
2798.9%100%
27.5100%100%
mode="precision"
Reading time by deviceReading time by device
Reading time by device
minutesdesktopphone
11.1%2.6%
1.54.5%6.6%
211.4%11.8%
2.513.6%15.8%
317%25%
3.522.7%30.3%
430.7%38.2%
4.535.2%45.4%
540.9%52%
5.543.2%55.9%
648.9%61.2%
6.554.5%65.1%
754.5%67.1%
7.558%69.1%
862.5%71.7%
8.564.8%75%
967%78.3%
9.570.5%80.9%
1070.5%84.2%
10.572.7%86.8%
1173.9%89.5%
11.573.9%93.4%
1278.4%94.1%
12.579.5%94.7%
1380.7%95.4%
13.583%95.4%
1485.2%96.1%
14.586.4%96.7%
1587.5%97.4%
15.588.6%98%
16.590.9%98%
1790.9%99.3%
1892%99.3%
18.593.2%99.3%
19.594.3%99.3%
2095.5%99.3%
21.596.6%100%
23.597.7%100%
2798.9%100%
27.5100%100%
substrate="green"
Reading time by deviceReading time by device
Reading time by device
minutesdesktopphone
11.1%2.6%
1.54.5%6.6%
211.4%11.8%
2.513.6%15.8%
317%25%
3.522.7%30.3%
430.7%38.2%
4.535.2%45.4%
540.9%52%
5.543.2%55.9%
648.9%61.2%
6.554.5%65.1%
754.5%67.1%
7.558%69.1%
862.5%71.7%
8.564.8%75%
967%78.3%
9.570.5%80.9%
1070.5%84.2%
10.572.7%86.8%
1173.9%89.5%
11.573.9%93.4%
1278.4%94.1%
12.579.5%94.7%
1380.7%95.4%
13.583%95.4%
1485.2%96.1%
14.586.4%96.7%
1587.5%97.4%
15.588.6%98%
16.590.9%98%
1790.9%99.3%
1892%99.3%
18.593.2%99.3%
19.594.3%99.3%
2095.5%99.3%
21.596.6%100%
23.597.7%100%
2798.9%100%
27.5100%100%
ground="cyanotype"

Example

The chart above, in each framework. Pick a framework once and every example on the site follows it.

shell
npm install @silverpoint/react @silverpoint/grounds @silverpoint/fonts
tsx
import '@silverpoint/fonts/fonts.css';
import '@silverpoint/grounds/styles.css';
import { EcdfChart } from '@silverpoint/react/ecdf-chart';

const data = [
  { reader: 'R001', device: 'desktop', minutes: 4 },
  { reader: 'R002', device: 'phone', minutes: 17 },
  { reader: 'R003', device: 'phone', minutes: 3 },
  { reader: 'R004', device: 'phone', minutes: 6.5 },
  { reader: 'R005', device: 'phone', minutes: 3.5 },
  { reader: 'R006', device: 'phone', minutes: 3 },
  { reader: 'R007', device: 'phone', minutes: 4.5 },
  { reader: 'R008', device: 'desktop', minutes: 23.5 },
  { reader: 'R009', device: 'phone', minutes: 1 },
  { reader: 'R010', device: 'desktop', minutes: 1 },
  { reader: 'R011', device: 'phone', minutes: 6.5 },
  { reader: 'R012', device: 'desktop', minutes: 4.5 },
  // … 228 more rows of the same shape
];

export default function App() {
  return (
    <div style={{ width: 480 }}>
      <EcdfChart
        data={data}
        valueKey="minutes"
        groupKey="device"
        title="Reading time by device"
        unit="min"
      />
    </div>
  );
}

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.

FrameworkImport
Reactimport { EcdfChart } from '@silverpoint/react/ecdf-chart';
Vueimport { SpEcdfChart } from '@silverpoint/vue/ecdf-chart';
Angularimport { SpEcdfChart } from '@silverpoint/angular/ecdf-chart'; // <sp-ecdf-chart>
Reflexfrom reflex_silverpoint_react import ecdf_chart

Props

The props EcdfChart adds to the ones every chart takes. Accessor props (…Key, keys, names) name fields of your rows and are ignored without data.

React / AngularVueReflexTypeDescription
valueKeyvalue-keyvalue_keyAccessor<number | null | undefined>—
groupKeygroup-keygroup_keyAccessor<string | null | undefined>Two groups at most are drawn.
markersmarkersmarkersreadonly number[]Quantiles, in 0-1, drawn as rules.

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 / AngularVueReflexTypeDescription
datadatadatareadonly Datum[]Rows to draw. If omitted, the demo dataset is rendered (REQ-093) and the accessor props (…_key, keys, names) are ignored.
groundgroundgroundGroundRefStyle ground: silverpoint or cyanotype, or a ground object. Defaults to the app provider's, or silverpoint.
substratesubstratesubstrateSubstrateNamePrepared substrate within the ground (REQ-046).
modemodemodeInkModeink by default; precision disables inking (REQ-021).
seedseedseedSeedSeed. If omitted, it is derived from id stably (REQ-003).
idididstringStable identifier. If omitted, it is generated deterministically.
heightheightheightnumberHeight of the drawing area in px. Width is the container's unless pinned.
widthwidthwidthnumber—
chromechromechrome'card' | 'bare'card draws the full frame; bare only the drawing area (REQ-095).
hatchFillhatch-fillhatch_fill'tile' | 'per-shape'How areas are filled (REQ-029).
titletitletitlestring—
badgebadgebadgestring—
valuevaluevaluestring | number—
unitunitunitstring—
footerLeftfooter-leftfooter_leftstring—
footerRightfooter-rightfooter_rightstring—
labellabellabelstringAccessible name. If omitted, it is derived from title (REQ-120).
descriptiondescriptiondescriptionstringLong description for screen readers (REQ-120).
dataTabledata-tabledata_table'visible' | 'hidden' | 'none'Tabular alternative; hidden leaves it for assistive technology only (REQ-121).
localelocalelocalestring—
numberFormatnumber-formatnumber_formatIntl.NumberFormatOptions—
classNameclass-nameclass_namestring—

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 } }.

FrameworkActive itemSelectionCustom readout
ReactonActiveChangeonSelecttooltip={(item, readout) => …}
Vue@active-change@select<template #tooltip>
Angular(activeChange)(select)<ng-template spTooltip>
Reflexon_active_changeon_selecttooltip=tooltip_template(…)
Interaction and readouts →
Report it
Found something wrong with EcdfChart? Open an issue on GitHub — the form comes pre-filled with the chart and the version.