ECharts在React中的使用

首先通过npm安装Echarts,也可写进package.json中install

npm install echarts --save-dev

新建一个ReactEcharts组件

import React, { Component } from 'react'

/**
 * 第一个import echarts是必须的
 * 第二个是引入的具体的一个图表类型 (可选)
 * 第三个是表的title(可选)
 * 第四个是表的工具栏组件相关的行为(可选,
   内置有导出图片,数据视图,动态类型切换,数据区域缩放,重置五个工具)
 */
import echarts from 'echarts/lib/echarts'
import 'echarts/lib/chart/bar'
import 'echarts/lib/component/title'
import 'echarts/lib/component/toolbox'

class ReactEcharts extends Component {
   
    constructor(props) {
        super(props)
    }
    componentDidMount() {
        //初始化图表
        this.initChart();
    }
    componentWillReceiveProps(nextProps) {
        //更新图表
        this.initChart(nextProps);
    }
    /*生成图表,做了判断,如果不去判断dom有没有生成,
      每次更新图表都要生成一个dom节点*/
    initChart(props) {
        let option = props === undefined ? this.props.option : props.option;
        // 基于准备好的dom,初始化echarts实例
        let myChart = echarts.getInstanceByDom(document.getElementById('main'));
        if( myChart === undefined){
            myChart = echarts.init(document.getElementById('main'));
        }
        // 绘制图表,option设置图表格式及源数据
        myChart.setOption(option);
    }

    render() {
        return (
        //width和height可由属性值传入
            <div id="main" style={{ width: 800, height: 400 }}></div>
        );
    }
};

export {ReactEcharts as default};

新建一个HomeChart.js文件,在需要的地方引入ReactEcharts组件

import React, { Component } from 'react';
import classNames from 'classnames';
import ReactEcharts from 'scripts/components/ReactEcharts';

class HomeChart extends Component {

    constructor(props) {
        super(props)
        this.state = {
        //option可由函数初始化
            option: option1
        };
    }

    componentDidMount() {
        // this.getOptions(option1)
    }
    
    //数据发生变化后更新option,由state管理
    getOptions(options) {
        this.setState({option: options});
    }

    render() {
        let {option} = this.state;
        return (
            <div>
                <button onClick={this.getOptions}>查询</button>
                <div className="pull-left mt-20">
                    <ReactEcharts option={option}></ReactEcharts>
                </div>
            </div>
        )
    }
};

export default HomeChart

ECharts 配置option示例

myChart.setOption({
    color: 'blue',
    title: {
        left: 'center',
        text: '订单利润报表',
        subtext: 'data from tnet'
    },
    toolbox: {
        right: '40px',
        // top: '15px',
        feature: {
            dataView: {show: true, readOnly: false},
            magicType: {
                show: true,
                type: ['line', 'bar']
            },
            restore: {show: true},
            saveAsImage: {
                show: true,
                type: 'png'
            },
        }
    },
    tooltip : {
        trigger: 'axis',
        axisPointer : {            // 坐标轴指示器,坐标轴触发有效
            type : 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
        }
    },
    grid: {
        left: '3%',
        right: '4%',
        bottom: '3%',
        containLabel: true
    },
    xAxis : [
        {
            type : 'category',
            data : [10, 22, 20, 334, 390, 330, 220, 220, 200, 334,
                39, 33, 220, 220, 200, 334, 390, 330, 220, 220,
                20, 34, 390, 330, 220, 220, 200, 334, 390, 330, 220],
            axisTick: {
                alignWithLabel: true
            },
            axisLabel: {
                interval:0,
                rotate:60
            }
        }
    ],
    yAxis : [
        {
            type : 'value'
        }
    ],
    series : [
        {
            name: '收入',
            type: 'bar',
            stack: '总量',
            barWidth: '60%',
            label: {
                normal: {
                    show: true,
                    position: 'top'
                }
            },
            data:[10, 22, 20, 334, 390, 330, 220, 220, 200, 334,
                39, 33, 220, 220, 200, 334, 390, 330, 220, 220,
                20, 34, 390, 330, 220, 220, 200, 334, 390, 330, 220]
        }
    ]
})

配置项

  • 标题 title
    • title.text => 主标题文本
    • title.link => 主标题文本超链接
    • title.textStyle => 主标题样式
    • title.subtext => 副标题文本
    • title.sublink => 副标题文本超链接
    • title.left(top、right、bottom) => 标题位置
  • 工具栏组件 toolbox
    • toolbox.left (top、right、bottom) => 工具栏组件位置
    • toolbox.feature => 各工具配置项
      • toolbox.feature.saveAsImage => 保存为图片
      • toolbox.feature.restore => 配置项还原
      • toolbox.feature.dataView => 数据视图工具,可以展现当前图表所用的数据,编辑后可动态更新
      • toolbox.feature.dataZoom => 数据区域缩放 ,目前只支持直角坐标系的缩放
      • toolbox.feature.magicType => 动态类型切换
  • 绘图网格 grid
    • grid.left(top、right、bottom) => grid 组件位置
    • grid.containLabel => grid 区域是否包含坐标轴的刻度标签
    • grid.show => 是否显示直角坐标系网格
  • 提示框组件tooltip(提示框组件可以设置在全局或局部)
    • tooltip.trigger => 触发类型('item'|'axis'|'none')
    • tooltip.axisPointer => 坐标轴指示器配置项
    • tooltip.triggerOn => 提示框触发的条件('mousemove'|'click')
    • tooltip.enterable => 鼠标是否可进入提示框浮层中,默认为false
  • 系列列表 series
    • series[i].type => 系列图表类型
    • series[i].name => 系列名称,用于tooltip的显示
    • series[i].label => 图形上的文本标签
      • series[i].label.position => 标签的位置
      • series[i].label.rotate => 标签旋转
      • series[i].label.fontSize => 标签的字体大小
      • series[i].label.color => 标签的颜色
    • series[i].data => 系列中的数据内容数组
    • series[i].xAxisIndex => 使用的x轴的 index,在单个图表实例中存在多个x轴的时候有用
    • series[i].yAxisIndex => 使用的y轴的 index,在单个图表实例中存在多个y轴的时候有用
  • grid 中的 x 轴 x Axis
    • xAxis.type => 坐标轴类型('value'|'category'|'time'|'log')
    • xAxis.nameLocation => 坐标轴名称显示位置
    • xAxis.nameRotate => 坐标轴名字旋转,角度值
    • xAxis.scale => 是否是脱离 0 值比例,设置成 true 后坐标刻度不会强制包含零刻度
  • grid 中的 y 轴 yAxis(与x轴相同)
  • 图例组件 legend(图例组件展现了不同系列的标记,颜色和名字。可以通过点击图例控制哪些系列不显示)

    • legend.data => 图例的数据数组
    • legend.left (top、right、bottom) => 图例组件位置
    • legend.padding => 图例的内边距
    • legend.itemGap => 图例每项之间的间隔
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容

  • 这篇文章主要讲述Echarts设置字体和线条的颜色相关操作笔记,希望文章对你有所帮助,主要是自己的在线笔记吧。我在...
    蓝色梦想家阅读 9,929评论 1 1
  • 最近在实习期间,接手了一个数据搜索项目,需要我从后台调取数据,并将之用折线图直方图显示出来,并且可以将多组数据绘制...
    南客nk阅读 7,965评论 3 21
  • Can't get dom width or height echarts解决方案 var mainContain...
    飞豹豹豹豹豹阅读 1,556评论 0 0
  • ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前...
    YOYO做设计阅读 9,474评论 2 7
  • 从前读书时,老师教我们写一篇文章前加一个几个字的题记会加分。 ———题记 ...
    李梅迪阅读 394评论 1 0