UNPKG

@streetscape.gl/monochrome

Version:

A toolkit of React components for streetscape.gl

198 lines (152 loc) 7.91 kB
# Plot Components that render a plot of multiple data series. **Features** - Multiple series - Legends and toggles - Fully stylable - Hover tooltip ## Usage ```js import {MetricCard, MetricChart, RichMetricChart} from '@streetscape.gl/monochrome'; const View = () => { return ( <MetricCard title="Speed" description="This chart shows measured speed"> <MetricChart data={{ car: [{x: 0, y: 0}, {x: 1, y: 0.5}, {x: 2, y: 1}], train: [{x: 0, y: 0}, {x: 1, y: 0.2}, {x: 2, y: 2}] }} unit="m/s" highlightX={0} /> </MetricCard> ); }; ``` ## API Reference ## MetricCard `MetricCard` is a wrapper component that renders the title and status of a metric. ### Props - `className` **(string, optional)** - additional class name for the container - `style` **(object, optional)** - custom CSS styles. See "styling" section below. - `title` **(string|Element)** - title of the chart. If empty, the title bar will be hidden. - `description` **(string|Element)** - description of the chart. It is shown when the title is hovered. - `isLoading` **(bool)** - show a loading spinner - `error` **(string)** - show a message if loading the chart encounters an error. ### Styling The `style` prop expects an object that may contain the following keys: - `wrapper` - the container of the card. - `title` - the title of the card. - `spinner` - the spinner that is shown when the card is loading. - `error` - the error message. - `tooltip` - the title tooltip. This value will be passed to the [Tooltip](../shared/popover/README.md) component. The values define the styling overrides for the respective child components. Unless noted otherwise, each value is an object, or a callback function. A custom style callback function will receive the following arguments: - `props` **(object)** - `theme` **(object)** - the current theme - `hasError` **(boolean)** - `isLoading` **(boolean)** ## MetricChart `MetricChart` renders a collection of line charts into a single x-y plot. Legends are only shown as tooltip when the chart is hovered over. If you have a large number of line series, see `RichMetricChart`. ### Data Props - `data` **(object)** - data to render, as a map from series name to an array of points. - `highlightX` **(number)** - x position of the crosshair when the chart is not hovered. - `unit` **(string, optional)** - unit of the y axis. - `getX` **(function, optional)** - accessor of the `x` value from each data point. Default `d => d.x`. - `getY` **(function, optional)** - accessor of the `y` value from each data point. Default `d => d.y`. - `getY0` **(function, optional)** - accessor of the `y0` value from each data point. Default `d => null`. If `y0` is not null, the series is rendered as an area filled from `y0` (bottom) to `y` (top). ### Styling Props - `width` **(number|string, optional)** - width of the chart. Default `100%`. - `height` **(number|string, optional)** - height of the chart. Default `300`. - `style` **(object, optional)** - custom CSS styles. See "styling" section below. - `xDomain` **([number, number], optional)** - [min, max] of the x axis. - `yDomain` **([number, number], optional)** - [min, max] of the y axis. - `xTicks` **(number, optional)** - number of ticks to show on the x axis. Default `4`. - `yTicks` **(number, optional)** - number of ticks to show on the y axis. Default `4`. - `horizontalGridLines` **(number, optional)** - number of horizontal grid lines. Default `4`. - `verticalGridLines` **(number, optional)** - number of vertical grid lines. Default `4`. - `formatXTick` **(function, optional)** - format the label along the x axis. - `formatYTick` **(function, optional)** - format the label along the y axis. - `formatTitle` **(function, optional)** - format a series name for display in the tooltip. - `formatValue` **(function, optional)** - format a data value for display in the tooltip. - `getColor` **(object|function|string, optional)** - the color accessor of a series. Default `#000`. - Type `string`: a CSS color string. - Type `object`: a map from series name to its CSS color. - Type `function`: a callback that receives a series name and returns its CSS color. ### Event Callback Props - `onClick` **(function, optional)** - Called when the chart is clicked. Parameters: - `x` (number) - x value at the pointer position. - `onMouseEnter` **(function, optional)** - Called when the pointer enters the chart area. - `onMouseMove` **(function, optional)** - Called when the pointer moves inside the chart area. - `onMouseLeave` **(function, optional)** - Called when the pointer leaves the chart area. - `onSeriesMouseOver` **(function, optional)** - Called when the pointer enters a line series. Parameters: - `key` (string) - name of the series. - `onNearestX` **(function, optional)** - Called when the pointer moves relative to a line series. Parameters: - `key` (string) - name of the series. - `value` (object) - datum that is closest to the pointer. - `onSeriesMouseOut` **(function, optional)** - Called when the pointer leaves a line series. Parameters: - `key` (string) - name of the series. ### Styling The `style` prop expects an object that may contain the following keys: - `margin` **(object)** - margin of the plot. Default `{left: 32, top: 20, right: 20, bottom: 32}`. - `chart` - the chart component - `crosshair` - the info box shown on hover - `crosshairTitle` - the series names in the tooltip - `crosshairValue` - the value texts in the tooltip - `crosshairLegend` - the color legends in the tooltip The values define the styling overrides for the respective child components. Unless noted otherwise, each value is an object, or a callback function. A custom style callback function will receive the following arguments: - `props` **(object)** - `theme` **(object)** - the current theme The `tooltipTitle`, `tooltipValue` and `tooltipLegend` callbacks will receive the following arguments: - `props` **(object)** - `theme` **(object)** - the current theme - `name` **(string)** - key of the series - `displayName` **(string)** - dispay name of the series - `color` **(string)** - color of the series - `isFirst` **(boolean)** - if this is the first item in the list - `isLast` **(boolean)** - if this is the last item in the list ## RichMetricChart `RichMetricChart` renders a collection of line charts into a single x-y plot, and a list of legends to filter the data. ### Props Every prop supported by `MetricChart`, plus the following: - `topSeriesCount` **(number)** - Number of series to display by default. The data series are sorted by their peak value. ### Styling The `style` prop expects an object that may contain any of the stylable components of the `MetricChart`, plus the following: - `filter` - the filter container - `filterToggle` - the toggle to show/hide additional filters - `iconExpanded` **(element)** - the icon when filters are expanded. - `iconCollapsed` **(element)** - the icon when filters are collapsed. - `iconOn` **(element)** - the icon for a filter that is on. - `iconOff` **(element)** - the icon for a filter that is off. - `filterItem` - the name of a series in the filters - `filterLegend` - the color legend of a series in the filters The `filter` callback function will receive the following arguments: - `props` **(object)** - `theme` **(object)** - the current theme The `filterItem` and `filterLegend` callbacks will receive the following arguments: - `props` **(object)** - `theme` **(object)** - the current theme - `name` **(string)** - key of the series - `displayName` **(string)** - dispay name of the series - `color` **(string)** - color of the series - `isActive` **(boolean)** - if the series is turned on - `isHovered` **(boolean)** - if the pointer is hovering over this series