react—echarts实例

 先模拟定义后端数据

const statistics = [{"hour":"00","click_num":2208,"submit_num":921,"device_num":31},{"hour":"01","click_num":1957,"submit_num":805,"device_num":28},{"hour":"02","click_num":113,"submit_num":27,"device_num":0},{"hour":"03","click_num":0,"submit_num":0,"device_num":0},{"hour":"04","click_num":0,"submit_num":0,"device_num":0},{"hour":"05","click_num":10,"submit_num":5,"device_num":0},{"hour":"06","click_num":0,"submit_num":0,"device_num":0},{"hour":"07","click_num":12,"submit_num":9,"device_num":0},{"hour":"08","click_num":0,"submit_num":0,"device_num":0},{"hour":"09","click_num":689,"submit_num":561,"device_num":19},{"hour":"10","click_num":1499,"submit_num":1181,"device_num":19},{"hour":"11","click_num":1219,"submit_num":937,"device_num":37},{"hour":"12","click_num":2509,"submit_num":1752,"device_num":42},{"hour":"13","click_num":484,"submit_num":245,"device_num":18},{"hour":"14","click_num":3,"submit_num":3,"device_num":0},{"hour":"15","click_num":4,"submit_num":3,"device_num":0},{"hour":"16","click_num":1,"submit_num":1,"device_num":0},{"hour":"17","click_num":0,"submit_num":0,"device_num":0},{"hour":"18","click_num":0,"submit_num":0,"device_num":0},{"hour":"19","click_num":0,"submit_num":0,"device_num":0},{"hour":"20","click_num":0,"submit_num":0,"device_num":0},{"hour":"21","click_num":0,"submit_num":0,"device_num":0},{"hour":"22","click_num":0,"submit_num":0,"device_num":0},{"hour":"23","click_num":0,"submit_num":0,"device_num":0},{"hour":"总计","click_num":10708,"submit_num":6450,"device_num":194}]

echarts Api

echarts.init(this.ID) 创建一个 ECharts 实例,返回 echartsInstance,不能在单个容器上初始化多个 ECharts 实例。

echarts.dispose(this.ID) 销毁实例,实例销毁后无法再被使用。

myChart.setOption(lineOption) 设置图表实例的配置项以及数据,万能接口,所有参数和数据的修改都可以通过 setOption 完成,ECharts 会合并新的参数和数据,然后刷新图表。如果开启动画的话,ECharts 找到两组数据之间的差异然后通过合适的动画去表现数据的变化。

配置项 // https://echarts.baidu.com/option.html#grid.tooltip.axisPointer.type

   tooltip:{} 本坐标系特定的 tooltip 设定。

   grid:{} 直角坐标系内绘图网格,单个 grid 内最多可以放置上下两个 X 轴,左右两个 Y 轴 

   xAxis:{} 直角坐标系 grid 中的 x 轴,一般情况下单个 grid 组件最多只能放上下两个 x 轴,多于两个 x 轴需要通过配置 offset 属性防止同个位置多个 x 轴的重叠。

   legend:{[]} 图例组件展现了不同系列的标记(symbol),颜色和名字

   yAxis:{} 直角坐标系 grid 中的 y 轴,一般情况下单个 grid 组件最多只能放左右两个 y 轴,多于两个 y 轴需要通过配置 offset 属性防止同个位置多个 Y 轴的重叠。

   series:[] 系列列表。每个系列通过 type 决定自己的图表类型

下面是react代码

 定义表头数据(初始值) 类似antd-table的columns

let lineOption = {
  title: {
    text: '每小时任务数'
  },
  tooltip : {
    trigger: 'axis',
    axisPointer: {
      type: 'cross',
      label: {
        backgroundColor: '#6a7985'
      }
    }
  },
  toolbox: {
    feature: {
    }
  },
  grid: {
    left: '3%',
    right: '4%',
    bottom: '5%',
    containLabel: true
  },
  xAxis : [
    {
      type : 'category',
      boundaryGap : false,
      axisLabel: {
        showMaxLabel: true,
        margin: 13,
        rotate: 30,
      }
    }
  ],
  legend: {
    data:['每小时点击数', '每小时提交数']
  },
  yAxis: {
    type: 'value'
  },
  series : [{
    name: '每小时点击数',
    type: 'line',
    data: [120, 132, 101, 134, 90, 230, 210]
  }, {
    name: '每小时提交数',
    type: 'line',
    data: [120, 132, 101, 134, 90, 230, 210]
  }]
};

class类里面

import echarts from 'echarts';
export default class Hours extends Component {
  constructor(props) {
    super(props)
    this.state = {
      myChart: {},
      viewData:[],
    }
  }
  componentDidMount() {
    if (this.ID) {
        this.setState({
          myChart: echarts.init(this.ID),
          viewData:statistics,
        }, () => {
          this.initChart()
        })
     }
  }
  initChart () {
    const { viewData } = this.state;
    let chartData = viewData.slice(0, -1)
    if (viewData.length === 0) return false
    let xData = [], yClickData = [], ySubmitData = [];
    chartData.forEach((val) => {
      xData.push(val.hour);
      yClickData.push(val.click_num);
      ySubmitData.push(val.submit_num);
    })
    let max = Math.max(...yClickData);
    lineOption.xAxis[0].data = xData;
    lineOption.yAxis.max = max + 500 - (max % 500)
    lineOption.series[0].data = yClickData;
    lineOption.series[1].data = ySubmitData;
    echarts.dispose(this.ID)
    let myChart = echarts.init(this.ID) //初始化echarts
    //设置options
    myChart.setOption(lineOption)
    window.onresize = function () {
      myChart.resize()
    }
  }
  render() {
    return (
        <div style={{ width: '100%', height: 400 }} ref={ID => this.ID = ID}></div>
    )
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值