【数据可视化】react异步加载数据并动态渲染echart柱状图

10 篇文章 0 订阅
1 篇文章 0 订阅

本文将实现的功能如下:

  • 通过api异步获取数据并动态加载
  • 根据数值的区间,柱状图单根柱子颜色展示不同
  • 柱状图横坐标标题过长,超出部分身略号代替

一、引入echart库和加载数据的api

import * as echarts from 'echarts';
import 'echarts/lib/chart/bar';
import 'echarts/lib/component/tooltip';
import 'echarts/lib/component/title';
import { getCharList } from '../../../services/map/api';

二、处理数据,绘制柱状图

const drawChart = async() =>{

    let chartOneXaxis = {} as any;
    let chartOneYaxis = {} as any;
    
    await getCharList().then((res: any) => {
      chartOneXaxis = Object.keys(res.data.PENDING_ALARM)
      chartOneYaxis = Object.values(res.data.PENDING_ALARM)
    });

    const chartDom1 = document.getElementById('linechart1')!;
    const myChart1 = echarts.init(chartDom1);
    myChart1.setOption({
      title: { text: '此柱状图标题' },
      tooltip: {},
      xAxis: {
        data: chartOneXaxis, //横坐标数据
        axisLabel: {
          show: true,
          interval: 0,
          rotate: 45,
          fontSize: 10,
          formatter: function (params: any) {
            let val = '';
            const show = 6;
            if (params.length > show) {
              val = params.substr(0, show) + '...';
              return val;
            } else {
              return params;
            }
          },
        },
      },
      yAxis: {
        type: 'value',
      },
      series: [
        {
          name: '',
          type: 'bar',
          data: chartOneYaxis, //纵坐标数据
          itemStyle: { //柱子颜色根据数值区间展示
			    normal: {
			        color: function (params: any) {
			            if(params.value > 0 && params.value < 10){
			                return "#FE8463";
			            }else if(params.value >= 10 && params.value <= 20 ){
			                return "#27727B";
			            }
			            return "#9BCA63";
			         },
			    },
			},
        },
      ],
    });
 }

api接口返回的数据格式如下:

{
  "code": "",
    "data": {
            {"销售总量": 123423 },
            {"销售总额": 103243524 },
    },
    "msg": "",
    "success": true
}

可以通过Object.keysObject.values分别将横坐标数值、纵坐标数值提取到两个不同的数组里,再进行数据渲染。

三、全部代码

import React, { useEffect } from 'react';
import * as echarts from 'echarts';
import 'echarts/lib/chart/bar';
import 'echarts/lib/component/tooltip';
import 'echarts/lib/component/title';
import { getCharList } from '../../../services/map/api';

const LineChart: React.FC = () => {

  const drawChart = async() =>{

    let chartOneXaxis = {} as any;
    let chartOneYaxis = {} as any;
    
    await getCharList().then((res: any) => {
      chartOneXaxis = Object.keys(res.data.PENDING_ALARM)
      chartOneYaxis = Object.values(res.data.PENDING_ALARM)
    });

    const chartDom1 = document.getElementById('linechart1')!;
    const myChart1 = echarts.init(chartDom1);
    myChart1.setOption({
      title: { text: '此柱状图标题' },
      tooltip: {},
      xAxis: {
        data: chartOneXaxis,
        axisLabel: {
          show: true,
          interval: 0,
          rotate: 45,
          fontSize: 10,
          formatter: function (params: any) {
            let val = '';
            const show = 6;
            if (params.length > show) {
              val = params.substr(0, show) + '...';
              return val;
            } else {
              return params;
            }
          },
        },
      },
      yAxis: {
        type: 'value',
      },
      series: [
        {
          name: '',
          type: 'bar',
          data: chartOneYaxis,
          itemStyle: { //柱子颜色根据数值区间展示
			    normal: {
			        color: function (params: any) {
			            if(params.value > 0 && params.value < 10){
			                return "#FE8463";
			            }else if(params.value >= 10 && params.value <= 20 ){
			                return "#27727B";
			            }
			            return "#9BCA63";
			         },
			    },
			},
        },
      ],
    });
  }

  useEffect(() => {
    drawChart()
  }, []);

  return (
    <div>
      <div id="linechart1" style={{ height: 250 }}></div>
    </div>
  );
};

export default LineChart;

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

椰卤工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值