import React, { Component } from 'react'; import { ResponsiveContainer, LineChart, Line, XAxis, YAxis, ReferenceLine, ReferenceArea, ReferenceDot, Tooltip, CartesianGrid, Legend, Brush, ErrorBar, AreaChart, Area, Label, LabelList } from 'recharts'; import { scalePow, scaleLog } from 'd3-scale'; import CustomLineDot from './CustomLineDot'; import { changeNumberOfData } from './utils'; import * as _ from 'lodash'; function Hello() { return
Hello
; } const data = [ { name: 'Page A', uv: 1000, pv: 2400, amt: 2400, uvError: [75, 20] }, { name: 'Page B', uv: 300, pv: 4567, amt: 2400, uvError: [90, 40] }, { name: 'Page C', uv: 280, pv: 1398, amt: 2400, uvError: 40 }, { name: 'Page D', uv: 200, pv: 9800, amt: 2400, uvError: 20 }, { name: 'Page E', uv: 278, pv: null, amt: 2400, uvError: 28 }, { name: 'Page F', uv: 189, pv: 4800, amt: 2400, uvError: [90, 20] }, { name: 'Page G', uv: 189, pv: 4800, amt: 2400, uvError: [28, 40] }, { name: 'Page H', uv: 189, pv: 4800, amt: 2400, uvError: 28 }, { name: 'Page I', uv: 189, pv: 4800, amt: 2400, uvError: 28 }, { name: 'Page J', uv: 189, pv: 4800, amt: 2400, uvError: [15, 60] }, ]; const data01 = [ { day: '05-01', weather: 'sunny' }, { day: '05-02', weather: 'sunny' }, { day: '05-03', weather: 'cloudy' }, { day: '05-04', weather: 'rain' }, { day: '05-05', weather: 'rain' }, { day: '05-06', weather: 'cloudy' }, { day: '05-07', weather: 'cloudy' }, { day: '05-08', weather: 'sunny' }, { day: '05-09', weather: 'sunny' }, ]; const data02 = [ { name: 'Page A', uv: 300, pv: 2600, amt: 3400 }, { name: 'Page B', uv: 400, pv: 4367, amt: 6400 }, { name: 'Page C', uv: 300, pv: 1398, amt: 2400 }, { name: 'Page D', uv: 200, pv: 9800, amt: 2400 }, { name: 'Page E', uv: 278, pv: 3908, amt: 2400 }, { name: 'Page F', uv: 189, pv: 4800, amt: 2400 }, { name: 'Page G', uv: 189, pv: 4800, amt: 2400 }, ]; const data03 = [ { date: 'Jan 04 2016', price: 105.35 }, { date: 'Jan 05 2016', price: 102.71 }, { date: 'Jan 06 2016', price: 100.7 }, { date: 'Jan 07 2016', price: 96.45 }, { date: 'Jan 08 2016', price: 96.96 }, { date: 'Jan 11 2016', price: 98.53 }, { date: 'Jan 12 2016', price: 99.96 }, { date: 'Jan 13 2016', price: 97.39 }, { date: 'Jan 14 2016', price: 99.52 }, { date: 'Jan 15 2016', price: 97.13 }, { date: 'Jan 19 2016', price: 96.66 }, { date: 'Jan 20 2016', price: 96.79 }, { date: 'Jan 21 2016', price: 96.3 }, { date: 'Jan 22 2016', price: 101.42 }, { date: 'Jan 25 2016', price: 99.44 }, { date: 'Jan 26 2016', price: 99.99 }, { date: 'Jan 27 2016', price: 93.42 }, { date: 'Jan 28 2016', price: 94.09 }, { date: 'Jan 29 2016', price: 97.34 }, { date: 'Feb 01 2016', price: 96.43 }, { date: 'Feb 02 2016', price: 94.48 }, { date: 'Feb 03 2016', price: 96.35 }, { date: 'Feb 04 2016', price: 96.6 }, { date: 'Feb 05 2016', price: 94.02 }, { date: 'Feb 08 2016', price: 95.01 }, { date: 'Feb 09 2016', price: 94.99 }, { date: 'Feb 10 2016', price: 94.27 }, { date: 'Feb 11 2016', price: 93.7 }, { date: 'Feb 12 2016', price: 93.99 }, { date: 'Feb 16 2016', price: 96.64 }, { date: 'Feb 17 2016', price: 98.12 }, { date: 'Feb 18 2016', price: 96.26 }, { date: 'Feb 19 2016', price: 96.04 }, { date: 'Feb 22 2016', price: 96.88 }, { date: 'Feb 23 2016', price: 94.69 }, { date: 'Feb 24 2016', price: 96.1 }, { date: 'Feb 25 2016', price: 96.76 }, { date: 'Feb 26 2016', price: 96.91 }, { date: 'Feb 29 2016', price: 96.69 }, { date: 'Mar 01 2016', price: 100.53 }, { date: 'Mar 02 2016', price: 100.75 }, { date: 'Mar 03 2016', price: 101.5 }, { date: 'Mar 04 2016', price: 103.01 }, { date: 'Mar 07 2016', price: 101.87 }, { date: 'Mar 08 2016', price: 101.03 }, { date: 'Mar 09 2016', price: 101.12 }, { date: 'Mar 10 2016', price: 101.17 }, { date: 'Mar 11 2016', price: 102.26 }, { date: 'Mar 14 2016', price: 102.52 }, { date: 'Mar 15 2016', price: 104.58 }, { date: 'Mar 16 2016', price: 105.97 }, { date: 'Mar 17 2016', price: 105.8 }, { date: 'Mar 18 2016', price: 105.92 }, { date: 'Mar 21 2016', price: 105.91 }, { date: 'Mar 22 2016', price: 106.72 }, { date: 'Mar 23 2016', price: 106.13 }, { date: 'Mar 24 2016', price: 105.67 }, { date: 'Mar 28 2016', price: 105.19 }, { date: 'Mar 29 2016', price: 107.68 }, { date: 'Mar 30 2016', price: 109.56 }, { date: 'Mar 31 2016', price: 108.99 }, { date: 'Apr 01 2016', price: 109.99 }, { date: 'Apr 04 2016', price: 111.12 }, { date: 'Apr 05 2016', price: 109.81 }, { date: 'Apr 06 2016', price: 110.96 }, { date: 'Apr 07 2016', price: 108.54 }, { date: 'Apr 08 2016', price: 108.66 }, { date: 'Apr 11 2016', price: 109.02 }, { date: 'Apr 12 2016', price: 110.44 }, { date: 'Apr 13 2016', price: 112.04 }, { date: 'Apr 14 2016', price: 112.1 }, { date: 'Apr 15 2016', price: 109.85 }, { date: 'Apr 18 2016', price: 107.48 }, { date: 'Apr 19 2016', price: 106.91 }, { date: 'Apr 20 2016', price: 107.13 }, { date: 'Apr 21 2016', price: 105.97 }, { date: 'Apr 22 2016', price: 105.68 }, { date: 'Apr 25 2016', price: 105.08 }, { date: 'Apr 26 2016', price: 104.35 }, { date: 'Apr 27 2016', price: 97.82 }, { date: 'Apr 28 2016', price: 94.83 }, { date: 'Apr 29 2016', price: 93.74 }, { date: 'May 02 2016', price: 93.64 }, { date: 'May 03 2016', price: 95.18 }, { date: 'May 04 2016', price: 94.19 }, { date: 'May 05 2016', price: 93.24 }, { date: 'May 06 2016', price: 92.72 }, { date: 'May 09 2016', price: 92.79 }, { date: 'May 10 2016', price: 93.42 }, { date: 'May 11 2016', price: 92.51 }, { date: 'May 12 2016', price: 90.34 }, { date: 'May 13 2016', price: 90.52 }, { date: 'May 16 2016', price: 93.88 }, { date: 'May 17 2016', price: 93.49 }, { date: 'May 18 2016', price: 94.56 }, { date: 'May 19 2016', price: 94.2 }, { date: 'May 20 2016', price: 95.22 }, { date: 'May 23 2016', price: 96.43 }, { date: 'May 24 2016', price: 97.9 }, { date: 'May 25 2016', price: 99.62 }, { date: 'May 26 2016', price: 100.41 }, { date: 'May 27 2016', price: 100.35 }, { date: 'May 31 2016', price: 99.86 }, { date: 'Jun 01 2016', price: 98.46 }, { date: 'Jun 02 2016', price: 97.72 }, { date: 'Jun 03 2016', price: 97.92 }, { date: 'Jun 06 2016', price: 98.63 }, { date: 'Jun 07 2016', price: 99.03 }, { date: 'Jun 08 2016', price: 98.94 }, { date: 'Jun 09 2016', price: 99.65 }, { date: 'Jun 10 2016', price: 98.83 }, { date: 'Jun 13 2016', price: 97.34 }, { date: 'Jun 14 2016', price: 97.46 }, { date: 'Jun 15 2016', price: 97.14 }, { date: 'Jun 16 2016', price: 97.55 }, { date: 'Jun 17 2016', price: 95.33 }, { date: 'Jun 20 2016', price: 95.1 }, { date: 'Jun 21 2016', price: 95.91 }, { date: 'Jun 22 2016', price: 95.55 }, { date: 'Jun 23 2016', price: 96.1 }, { date: 'Jun 24 2016', price: 93.4 }, { date: 'Jun 27 2016', price: 92.04 }, { date: 'Jun 28 2016', price: 93.59 }, { date: 'Jun 29 2016', price: 94.4 }, { date: 'Jun 30 2016', price: 95.6 }, { date: 'Jul 01 2016', price: 95.89 }, { date: 'Jul 05 2016', price: 94.99 }, { date: 'Jul 06 2016', price: 95.53 }, { date: 'Jul 07 2016', price: 95.94 }, { date: 'Jul 08 2016', price: 96.68 }, { date: 'Jul 11 2016', price: 96.98 }, { date: 'Jul 12 2016', price: 97.42 }, { date: 'Jul 13 2016', price: 96.87 }, { date: 'Jul 14 2016', price: 98.79 }, { date: 'Jul 15 2016', price: 98.78 }, { date: 'Jul 18 2016', price: 99.83 }, { date: 'Jul 19 2016', price: 99.87 }, { date: 'Jul 20 2016', price: 99.96 }, { date: 'Jul 21 2016', price: 99.43 }, { date: 'Jul 22 2016', price: 98.66 }, { date: 'Jul 25 2016', price: 97.34 }, { date: 'Jul 26 2016', price: 96.67 }, { date: 'Jul 27 2016', price: 102.95 }, { date: 'Jul 28 2016', price: 104.34 }, { date: 'Jul 29 2016', price: 104.21 }, { date: 'Aug 01 2016', price: 106.05 }, { date: 'Aug 02 2016', price: 104.48 }, { date: 'Aug 03 2016', price: 105.79 }, { date: 'Aug 04 2016', price: 105.87 }, { date: 'Aug 05 2016', price: 107.48 }, { date: 'Aug 08 2016', price: 108.37 }, { date: 'Aug 09 2016', price: 108.81 }, { date: 'Aug 10 2016', price: 108 }, { date: 'Aug 11 2016', price: 107.93 }, { date: 'Aug 12 2016', price: 108.18 }, { date: 'Aug 15 2016', price: 109.48 }, { date: 'Aug 16 2016', price: 109.38 }, { date: 'Aug 17 2016', price: 109.22 }, { date: 'Aug 18 2016', price: 109.08 }, { date: 'Aug 19 2016', price: 109.36 }, { date: 'Aug 22 2016', price: 108.51 }, { date: 'Aug 23 2016', price: 108.85 }, { date: 'Aug 24 2016', price: 108.03 }, { date: 'Aug 25 2016', price: 107.57 }, { date: 'Aug 26 2016', price: 106.94 }, { date: 'Aug 29 2016', price: 106.82 }, { date: 'Aug 30 2016', price: 106 }, { date: 'Aug 31 2016', price: 106.1 }, { date: 'Sept 01 2016', price: 106.73 }, { date: 'Sept 02 2016', price: 107.73 }, { date: 'Sept 06 2016', price: 107.7 }, { date: 'Sept 07 2016', price: 108.36 }, { date: 'Sept 08 2016', price: 105.52 }, { date: 'Sept 09 2016', price: 103.13 }, { date: 'Sept 12 2016', price: 105.44 }, { date: 'Sept 13 2016', price: 107.95 }, { date: 'Sept 14 2016', price: 111.77 }, { date: 'Sept 15 2016', price: 115.57 }, { date: 'Sept 16 2016', price: 114.92 }, { date: 'Sept 19 2016', price: 113.58 }, { date: 'Sept 20 2016', price: 113.57 }, { date: 'Sept 21 2016', price: 113.55 }, { date: 'Sept 22 2016', price: 114.62 }, { date: 'Sept 23 2016', price: 112.71 }, { date: 'Sept 26 2016', price: 112.88 }, { date: 'Sept 27 2016', price: 113.09 }, { date: 'Sept 28 2016', price: 113.95 }, { date: 'Sept 29 2016', price: 112.18 }, { date: 'Sept 30 2016', price: 113.05 }, { date: 'Oct 03 2016', price: 112.52 }, { date: 'Oct 04 2016', price: 113 }, { date: 'Oct 05 2016', price: 113.05 }, { date: 'Oct 06 2016', price: 113.89 }, { date: 'Oct 07 2016', price: 114.06 }, { date: 'Oct 10 2016', price: 116.05 }, { date: 'Oct 11 2016', price: 116.3 }, { date: 'Oct 12 2016', price: 117.34 }, { date: 'Oct 13 2016', price: 116.98 }, { date: 'Oct 14 2016', price: 117.63 }, { date: 'Oct 17 2016', price: 117.55 }, { date: 'Oct 18 2016', price: 117.47 }, { date: 'Oct 19 2016', price: 117.12 }, { date: 'Oct 20 2016', price: 117.06 }, { date: 'Oct 21 2016', price: 116.6 }, { date: 'Oct 24 2016', price: 117.65 }, { date: 'Oct 25 2016', price: 118.25 }, { date: 'Oct 26 2016', price: 115.59 }, { date: 'Oct 27 2016', price: 114.48 }, { date: 'Oct 28 2016', price: 113.72 }, { date: 'Oct 31 2016', price: 113.54 }, { date: 'Nov 01 2016', price: 111.49 }, { date: 'Nov 02 2016', price: 111.59 }, { date: 'Nov 03 2016', price: 109.83 }, { date: 'Nov 04 2016', price: 108.84 }, { date: 'Nov 07 2016', price: 110.41 }, { date: 'Nov 08 2016', price: 111.06 }, { date: 'Nov 09 2016', price: 110.88 }, { date: 'Nov 10 2016', price: 107.79 }, { date: 'Nov 11 2016', price: 108.43 }, { date: 'Nov 14 2016', price: 105.71 }, { date: 'Nov 15 2016', price: 107.11 }, { date: 'Nov 16 2016', price: 109.99 }, { date: 'Nov 17 2016', price: 109.95 }, { date: 'Nov 18 2016', price: 110.06 }, { date: 'Nov 21 2016', price: 111.73 }, { date: 'Nov 22 2016', price: 111.8 }, { date: 'Nov 23 2016', price: 111.23 }, { date: 'Nov 25 2016', price: 111.79 }, { date: 'Nov 28 2016', price: 111.57 }, { date: 'Nov 29 2016', price: 111.46 }, { date: 'Nov 30 2016', price: 110.52 }, { date: 'Dec 01 2016', price: 109.49 }, { date: 'Dec 02 2016', price: 109.9 }, { date: 'Dec 05 2016', price: 109.11 }, { date: 'Dec 06 2016', price: 109.95 }, { date: 'Dec 07 2016', price: 111.03 }, { date: 'Dec 08 2016', price: 112.12 }, { date: 'Dec 09 2016', price: 113.95 }, { date: 'Dec 12 2016', price: 113.3 }, { date: 'Dec 13 2016', price: 115.19 }, { date: 'Dec 14 2016', price: 115.19 }, { date: 'Dec 15 2016', price: 115.82 }, { date: 'Dec 16 2016', price: 115.97 }, { date: 'Dec 19 2016', price: 116.64 }, { date: 'Dec 20 2016', price: 116.95 }, { date: 'Dec 21 2016', price: 117.06 }, { date: 'Dec 22 2016', price: 116.29 }, { date: 'Dec 23 2016', price: 116.52 }, { date: 'Dec 27 2016', price: 117.26 }, { date: 'Dec 28 2016', price: 116.76 }, { date: 'Dec 29 2016', price: 116.73 }, { date: 'Dec 30 2016', price: 115.82 }, ]; const series = [ { name: 'Series 1', data: [ { category: 'A', value: Math.random() }, { category: 'B', value: Math.random() }, { category: 'C', value: Math.random() } ] }, { name: 'Series 2', data: [ { category: 'B', value: Math.random() }, { category: 'C', value: Math.random() }, { category: 'D', value: Math.random() } ] }, { name: 'Series 3', data: [ { category: 'C', value: Math.random() }, { category: 'D', value: Math.random() }, { category: 'E', value: Math.random() } ] }, ]; const initialState = { data, data01, data02, opacity: 1, anotherState: false, }; const renderSpecialDot: React.FunctionComponent = (props: any) => { const { cx, cy, stroke, key } = props; if (cx === +cx && cy === +cy) { return ; } return null; }; const renderLabel: React.FunctionComponent = (props: any) => { const { x, y, textAnchor, key, value } = props; if (x === +x && y === +y) { return {value}; } return null; }; const scale = scaleLog().base(10).nice(); const specifiedDomain = [0.01, 'auto']; const specifiedTicks = [0.01, 0.1, 1, 10, 100, 1000]; const specifiedMargin = { top: 20, right: 20, bottom: 20, left: 20 }; export default class Demo extends Component { static displayName = 'LineChartDemo'; state: any = initialState; handleChangeData = () => { this.setState(() => _.mapValues(initialState, changeNumberOfData)); }; handleClick = (data: any, e: React.MouseEvent) => { console.log(data); }; handleLineClick = (data: any, e: React.MouseEvent) => { console.log('callback', data, e); }; handleLegendMouseEnter = () => { this.setState({ opacity: 0.5, }); }; handleClickDot = (data: any, e: React.MouseEvent) => { console.log('dot click', data, e); } handleLegendMouseLeave = () => { this.setState({ opacity: 1, }); }; handleChangeAnotherState = () => { this.setState({ anotherState: !this.state.anotherState, }); }; render() { const { data, data01, data02, opacity } = this.state; return (
change data

A simple LineChart with fixed domain y-axis

}>

A simple LineChart with customized line dot

} stroke='#ff7300' />

LineChart with two y-axes

{this.state.newLine && }

LineChart with three y-axes

LineChart when data change

{ this.setState({ data: this.state.data === data ? data02 : data }); }} > change data
} stroke="#ff7300" />

LineChart of vertical layout

LineChart of discrete values

LineChart with panoramic brush and custom tooltip styles

LineChart repeats categories on x axis

{series.map(s => ( ))}
); } }