在项目中使用echarts

最近在项目中需要使用一些图表,鉴于echarts的中文API,所以选择了echarts。项目是用webpack+vue来开发的。


安装依赖

npm install echarts --save-dev

然后在你需要使用图表的模版文件中引入echarts,目前用到了全国地图这个形式的图表,因此在引入echarts的同时还需要引入中国地图文件,文件在(下图)中。其中还有全国省的地图,不过目前用不到,就用china.js这个文件好了。
clipboard.png

引入

import echarts from 'echarts'
import china from 'echarts/map/js/china'

下面开始使用和一些简单配置:
思路是通过请求获取需要展示的数据,然后给配置给echarts,在页面渲染。确定思路那么开始:


mounted中完成请求功能

clipboard.png

接下来就是在methods中配置echarts的初始化工作

clipboard.png


好了图表出来了,后期配置下颜色就不会这么丑了...希望如此

clipboard.png

一、多数据地图和柱图联动

2017年7月20日 18:24:32 懒蛋楼主回来了,时隔好久补上一篇Echarts的使用案例吧,形式还是地图图表。
下面放上一个效果图
图片描述

该图表每个省份共有5种数据,单选某一省份的时候右侧的小图区出现该省的数据详情柱状图。

下面列出地图图表的配置

    let option = {
        backgroundColor: '#FFF',    //地图的背景色
        zoom: 1.5,                  //图形初始化的比例
        toolbox: {                //图表工具栏
            show: true,
            top:'0',
            left: '1%',
            feature: {
                dataView: {readOnly: true},    //数据视图切换
                restore: {},            //还原功能
                saveAsImage: {}        //保存图表至本地
            }
        },
        visualMap: {        //地图可视化
            min: 0,
            max: 2500,
            left: 'left',
            top: 'bottom',
            text: ['高','低'],
            calculable: true,
            inRange: {
                color: ['#e0ffff', '#006edd']    //地图区块展示颜色
            },
        },
        legend: {            //图例说明
            orient: 'horizontal',
            left: '25%',
            top: '1%',
            data:['统建CDN','IDC','省建Cache','统建Cache','省建OTT'],

        },
        tooltip:{        //鼠标悬停的提示框
            trigger: 'item',
            formatter: function(obj){
                let data = map4.mapdata[obj.dataIndex];
                return `<div style="border-bottom: 1px solid rgba(255,255,255,.3); font-size: 16px;padding-bottom: 7px;margin-bottom: 7px">
                            全网业务流量分布地图
                        </div>
                        省份:${data.name}<br/>
                        统建CDN:${data.value.CDN}GBPS<br />
                        IDC:${data.value.IDC}GBPS<br />
                        统建Cache:${data.value.Cache}GBPS<br />
                        省建Cache:${data.value.PCache}GBPS<br />
                        省建OTT:${data.value.POTT}GBPS<br />
                        总计流量:${data.value.POTT+data.value.CDN+data.value.IDC+data.value.Cache+data.value.PCache}GBPS<br />
                        `
            }
        },
        series: series,    //地图数据
    };
    //下面是具体的地图数据
    /*
    ** 因为数据的格式问题,这里对原始数据进行循环生成了五个独立的数据,放入series中
    */
    let ser = ()=>{
        let array = [];
        let labelArray = [{name:'统建CDN',item:'CDN'},{name:'IDC',item:'IDC'},{name:'省建Cache',item:'PCache'},{name:'统建Cache',item:'Cache'},{name:'省建OTT',item:'POTT'}]
        for(let i=0;i<labelArray.length;i++){
            array.push({
                name: labelArray[i].name,
                type: 'map',
                mapType: 'china',
                selectedMode : 'single',
                label: {
                    normal: { show: false},
                    emphasis: { show: false}
                },
                itemStyle: {
                    normal: {
                        color: Object.values(color)[i],    //color是定义的array里面有五种数据颜色
                        areaColor: colorD,    //colorD是定义的默认颜色
                        borderColor: 'rgba(100,149,237,1)',
                        opacity: '0.6'
                    },
                    emphasis: {
                        areaColor: colorD,
                        shadowColor: 'rgba(0, 0, 0, 0.5)',
                        shadowBlur: 10,
                        opacity: '0.8'
                    }
                },
                roam: true,
                data:data(labelArray[i].item)
            })
        }
        return array;
    }
    //data函数
    let data = (type)=>{
        let array = [];
        map4.mapdata.map((item)=>{
            array.push({
                name: item.name,
                value: item.value[type]
            })
        })
        return array;
    }
    
    let series = ser();
    //原始数据结构
    mapdata : [
        {
            name:'安徽',
            value:{
                CDN:193.5,
                IDC:884.64,
                Cache:43.88,
                PCache:17.61,
                POTT:406.39
            }
        },
        {
            name: '北京',
            value:{
                CDN:40.86,
                IDC:451.49,
                Cache:34.64,
                PCache:0,
                POTT:14.15
            }
        }
        ....
    ]
以上就是左侧地图部分的详细说明,这样我们就得到了一个地图图表。接下来我们开始实现左右联动。
drawmap(id){
    this.chart = echarts.init(document.getElementById(id));
    this.chart.setOption(option);
    this.chart.on('click',function(data){    //为图表绑定点击事件
        that.setData(data);
    });
},

这里楼主在使用Echarts自带的地图点击事件geoselected时,点击地图没有任何响应,不知道是什么原因,无奈只好使用了click,该方法返回一个对象:关于对象中的内容可以查看API。接下来我们就是通过这个对象里的一个dataIndex值来定位用户期望查看的数据:

let {name,dataIndex} = data;
let seriesData = [
    {
        name:`${name}`,
        type: 'bar',
        data:Object.values(map4.mapdata[dataIndex].value)
    }
];

将数据赋给柱图中,完成一次点击联动展示。

let option = {
    title: {
        text: `${name}流量数据`,
        left: 'center',
        textStyle:{
            fontSize: 16,
            fontWeight: 'normal'
        }
    },
    tooltip: {
        trigger: 'item',
        formatter:(item)=>{
            return `<div style="border-bottom: 1px solid rgba(255,255,255,.3); font-size: 16px;padding-bottom: 7px;margin-bottom: 7px">${name}流量数据</div>
                    ${item.name}:${item.value}GBPS<br/>`
        }
    },
    legend: {
        data: ['统建CDN','IDC','省建Cache','统建Cache','省建OTT']
    },
    grid: {
        left: '3%',
        right: '4%',
        bottom: '3%',
        containLabel: true
    },
    itemStyle:{
        normal:{
            color: function (params){
                return Object.values(color)[params.dataIndex]
            }
        }
    },
    xAxis: {
        type: 'value',
        boundaryGap: [0, 0.01]
    },
    yAxis: {
        type: 'category',
        data: ['统建CDN','IDC','省建Cache','统建Cache','省建OTT']
    },
    series:seriesData
};
有些朋友会报错,应该是初始化时候出的问题。在项目使用,我们在`mounted`中获取图表的数据,
并执行初始化图表的方法,因为请求是异步的,所以可能会出现没有数据的情况。因此我们需要使用`promise`这种方式,通过这种方式就可以让图形正常渲染出来。
this.$http.get('/data/showdaydata').then(res=>{
    this.data1 = this.formatterPro(res.data.PCache);
}).then(()=>{
    this.$nextTick(function() {
        this.drawbar('map-item-1');
    });
});
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值