React项目中使用Echart

2,343 阅读4分钟

数据可视化在前端开发中经常会遇到,前段时间开发工作中接到了一个图表展示的小需求,只对echart有所耳闻的我在摸索中完成了需求,下面一些笔记可供参考

第一步:安装下载echart

npm install echart
npm install --save echarts-for-react
npm install echarts --save //如果有报错找不到echarts模块,需要在安装一下exharts'

第二步:引入模块和组件

import React from 'react';
import ReactEcharts from 'echarts-for-react';
目录结构:

 MetaHivdeail
   Charts.jsx
   index.js

第三步:使用

index.js 文件 引入charts,并拿到接口返回的数据data

import Charts from './Charts';


{
                    label: '分区信息',
                    value: 'partition',
                    type: 'children',
                    body: () => (
                        <>
                            <BSFormAndTable {...formAntTableConfig}></BSFormAndTable>
                            <Charts data={data} />
                        </>
                    ),
                },

charts.jsx 文件 配置echart选项

import React from 'react';
import ReactEcharts from 'echarts-for-react';
function App(props) {
    const { data } = props;
                                             //用 option 描述 `数据`、`数据如何映射成图形`、`交互行为` 等
                                             //option 是个大的 JavaScript 对象
    const option = {
        color:'red'                         //修改图表系列颜色
        backgroudColor:'blue'               //修改图表背景颜色
        title: {                           //标题
            text: '分区行数监控',
            x:'center',
            textStyle:{
                 color:'yellow'
             }
        },
        tooltip: {                          //鼠标移入时的提示信息
            trigger: 'axis',
        },
        grid: {                            //位置
            left: '2%',
            right: '4%',
            bottom: '3%',
            containLabel: true,            //是否显示各种标签刻度
        },
        legend: {                          //图例
        data: ['蒸发量', '降水量', '平均温度']
         },
        xAxis: {                          //直角坐标系 X 轴
            type: 'category',             //坐标轴类型 'value' 数值轴,适用于连续数据; 
                                                     //'category' 类目轴,适用于离散的类目数据
                                                     //'time' 时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,在刻度计算上也有所不同,例如会根据跨度的范围来决定使用月,星期,日还是小时范围的刻度。
                                                     //'log' 对数轴。适用于对数数据
                                                     
            boundaryGap: false,          //坐标轴两边留白策略,类目轴和非类目轴的设置和表现不一样
                                         //类目轴中 boundaryGap 可以配置为 true 和 false。
                                         //默认为 true,这时候刻度只是作为分隔线,标签和数据点都会在两个刻度之间的带(band)中间。
                                         //非类目轴,包括时间,数值,对数轴,boundaryGap是一个两个值的数组,
                                         //分别表示数据最小值和最大值的延伸范围,可以直接设置数值或者相对的百分比,在设置 min 和 max 后无效。 示例:
                                         //boundaryGap: ['20%', '20%']
                                         
            data: data.map(({ part }) => part),//数据
            axisLabel: {
                interval: 0,             // 坐标轴刻度标签的显示间隔,在类目轴中有效
                                        //默认会采用标签不重叠的策略间隔显示标签
                                        //可以设置成 0 强制显示所有标签
                                        //如果设置为 1,表示『隔一个标签显示一个标签』,如果值为 2,表示隔两个标签显示一个标签,以此类推
                                        //可以用数值表示间隔的数据,也可以通过回调函数控制。回调函数格式如下:
                                          //(index:number, value: string) => boolean
                                          //第一个参数是类目的 index,第二个值是类目名称,如果跳过则返回 false
                                        
                rotate: 60,               //刻度标签旋转的角度,旋转的角度从 -90 度到 90 度
            },
            axisLine:{                  //修改x轴上字体颜色
                color:'red',
            }
            axisTick: {
                alignWithLabel: false,  //保证刻度线和标签对齐
            },
        },
        yAxis: {                       //直角坐标系 Y 轴
            type: 'value',
            offset: 10,
            axisLine:{                //修改y轴上字体颜色
                color:'red',
            }
        },
        series: [                      //图表数据
            {
                name: 'rows',
                type: 'bar',         //图表类型 line(折线图)、bar(柱状图)、pie(饼图)、scatter(散点图)、graph(关系图)、tree(树图)、
                barWidth: '10%',
                data: data.map(({ rows }) => rows),//图表中的数据
            },
            {
                name: 'rows',
                type: 'line',
                data: data.map(({ rows }) => rows),
            },
        ],
    };

    return (
        <div>
            <ReactEcharts option={option} />
        </div>
    );
}

export default App;

官网用例

// 用 option 描述 `数据`、`数据如何映射成图形`、`交互行为` 等。
// option 是个大的 JavaScript 对象。
var option = {
    // option 每个属性是一类组件。
    legend: {...},
    grid: {...},
    tooltip: {...},
    toolbox: {...},
    dataZoom: {...},
    visualMap: {...},
    // 如果有多个同类组件,那么就是个数组。例如这里有三个 X 轴。
    xAxis: [
        // 数组每项表示一个组件实例,用 type 描述“子类型”。
        {type: 'category', ...},
        {type: 'category', ...},
        {type: 'value', ...}
    ],
    yAxis: [{...}, {...}],
    // 这里有多个系列,也是构成一个数组。
    series: [
        // 每个系列,也有 type 描述“子类型”,即“图表类型”。
        {type: 'line', data: [['AA', 332], ['CC', 124], ['FF', 412], ... ]},
        {type: 'line', data: [2231, 1234, 552, ... ]},
        {type: 'line', data: [[4, 51], [8, 12], ... ]}
    }]
};

可优化点

`实时数据展示

 传统定时器 .  每间隔两秒执行请求数据的操作

 websocket

图表响应式处理

window.resize=function(){ mychart.resize() }`