packages/website/storybook/axis-story.js (207 lines of code) (raw):

/* eslint-env node */ import React from 'react'; import {storiesOf} from '@storybook/react'; import {withKnobs, number, select} from '@storybook/addon-knobs/react'; import {LineSeries, VerticalBarSeries, XAxis, YAxis} from 'react-vis'; import {generateLinearData, getTime, getWord} from './storybook-data.js'; import {SimpleChartWrapperNoAxes} from './storybook-utils'; storiesOf('Axes and scales/Axis Formatting/Base', module) .addDecorator(withKnobs) .addWithJSX('Axis orientation', () => { const XAxisOrientation = select( 'XAxis.orientation', {bottom: 'bottom', top: 'top'}, 'bottom', 'XAxis' ); const YAxisOrientation = select( 'YAxis.orientation', {left: 'left', right: 'right'}, 'left', 'YAxis' ); return ( <SimpleChartWrapperNoAxes margin={{ ...(XAxisOrientation === 'top' ? {bottom: 20, top: 40} : {}), ...(YAxisOrientation === 'right' ? {left: 10, right: 40} : {}) }} > <XAxis orientation={XAxisOrientation} /> <YAxis orientation={YAxisOrientation} /> <LineSeries data={generateLinearData({key: 'line1'})} /> </SimpleChartWrapperNoAxes> ); }) .addWithJSX('Axis titles', () => { const XAxisPosition = select( 'XAxis.position', {start: 'start', middle: 'middle', end: 'end'}, 'end', 'XAxis' ); const YAxisPosition = select( 'YAxis.position', {start: 'start', middle: 'middle', end: 'end'}, 'end', 'YAxis' ); return ( <SimpleChartWrapperNoAxes> <XAxis title="x-axis" position={XAxisPosition} /> <YAxis title="y-axis" position={YAxisPosition} /> <LineSeries data={generateLinearData({key: 'line1'})} /> </SimpleChartWrapperNoAxes> ); }) .addWithJSX('Tick total', () => { const xTickTotal = number( 'XAxis.tickTotal', 10, {max: 20, min: 0, range: true}, 'XAxis' ); const yTickTotal = number( 'YAxis.tickTotal', 10, {max: 20, min: 0, range: true}, 'YAxis' ); return ( <SimpleChartWrapperNoAxes> <XAxis tickTotal={xTickTotal} /> <YAxis tickTotal={yTickTotal} /> <LineSeries data={generateLinearData({key: 'line1'})} /> </SimpleChartWrapperNoAxes> ); }) .addWithJSX('Tick Size', () => { const xTickSize = number( 'XAxis.tickSize', 6, {max: 10, min: 0, range: true}, 'XAxis' ); const yTickSize = number( 'YAxis.tickSize', 6, {max: 10, min: 0, range: true}, 'YAxis' ); return ( <SimpleChartWrapperNoAxes noHorizontalGridLines noVerticalGridLines> <XAxis tickSize={xTickSize} /> <YAxis tickSize={yTickSize} /> <LineSeries data={generateLinearData({key: 'line1'})} /> </SimpleChartWrapperNoAxes> ); }) .addWithJSX('Tick Size (Inner)', () => { const xTickSize = number( 'XAxis.tickSizeInner', 6, {max: 10, min: 0, range: true}, 'XAxis' ); const yTickSize = number( 'YAxis.tickSizeInner', 6, {max: 10, min: 0, range: true}, 'YAxis' ); return ( <SimpleChartWrapperNoAxes noHorizontalGridLines noVerticalGridLines> <XAxis tickSizeInner={xTickSize} /> <YAxis tickSizeInner={yTickSize} /> <LineSeries data={generateLinearData({key: 'line1'})} /> </SimpleChartWrapperNoAxes> ); }) .addWithJSX('Tick Size (Outer)', () => { const xTickSize = number( 'XAxis.tickSizeOuter', 6, {max: 10, min: 0, range: true}, 'XAxis' ); const yTickSize = number( 'YAxis.tickSizeOuter', 6, {max: 10, min: 0, range: true}, 'YAxis' ); return ( <SimpleChartWrapperNoAxes noHorizontalGridLines noVerticalGridLines> <XAxis tickSizeOuter={xTickSize} /> <YAxis tickSizeOuter={yTickSize} /> <LineSeries data={generateLinearData({key: 'line1'})} /> </SimpleChartWrapperNoAxes> ); }) .addWithJSX('Tick orientation', () => { const tickLabelAngle = number( 'tickLabelAngle', 0, {max: 90, min: -90, range: true}, 'XAxis' ); return ( <SimpleChartWrapperNoAxes margin={{bottom: 80}}> <XAxis tickFormat={d => new Date(d).toLocaleDateString()} tickLabelAngle={tickLabelAngle} /> <YAxis /> <LineSeries data={generateLinearData({ key: 'line-with-time', extraParams: [['x', getTime({})]] })} /> </SimpleChartWrapperNoAxes> ); }); storiesOf('Axes and scales/Scales', module) .addDecorator(withKnobs) .addWithJSX('time Scale', () => { return ( <SimpleChartWrapperNoAxes margin={{right: 20}}> <XAxis tickFormat={d => new Date(d).toLocaleDateString()} /> <YAxis /> <LineSeries data={generateLinearData({ key: 'line-with-time', extraParams: [['x', getTime({})]] })} /> </SimpleChartWrapperNoAxes> ); }) .addWithJSX('category scale', () => { const data = generateLinearData({ nbPoints: 8, changeRatio: 0.4, key: 'bar1' }); return ( <SimpleChartWrapperNoAxes xType="ordinal"> <XAxis /> <YAxis /> <VerticalBarSeries data={data} /> </SimpleChartWrapperNoAxes> ); }) .addWithJSX('ordinal scale', () => { const data = generateLinearData({ nbPoints: 8, changeRatio: 0.4, key: 'bar-with-words', extraParams: [['x', getWord({})]] }); return ( <SimpleChartWrapperNoAxes xType="ordinal"> <XAxis /> <YAxis /> <VerticalBarSeries data={data} /> </SimpleChartWrapperNoAxes> ); });