vue当中使用echarts的简单可视化

vue当中使用echarts的简单可视化

echarts做可视化数据视图很优美直观,echarts的官网有示例的代码

一、全局引入echarts

npm install echarts --save

二、单页面当中使用局部echarts

//editTaskItem.vue

<template>
<!-- echart需要操作dom来实现-->
    <div>
        <div rel="myEcharts" style=""></div>
    </div>
</template>
<script>
    const echarts = require('echarts')
    export defualt{
        data(){
            
        },
        mounted(){
            this.setMyEcharts()
        },
        methods:{
           setMyEcharts(){
               let mychart = echarts.init(this.$rels.myEcharts)
               let option = {
                   //x轴
                   xAxis:{
                       type:'category',
                       //x轴上的值
                       data:[]
                   },
                   //y
                   yAxis:{
                     type:'value',
                     //可以不设置y的值,若不设置y轴上的值,会使用echarts默认的         
                     data:[]
                     
                   },
                   series:[{
                       //x轴上每个对应的值
                       data:[],
                       type:'bar',
                       showBackground:true,
                       backgroundStyle:{
                           color:'xxx'
                       }
                   }]
               }
               mychart.setOption(option)
           }     
        },
        
    }
</script>
<style>
</style>

上面的写法不够完善,会出现一种情况:当dom元素还未加载的时候,option就获取元素,echarts.init()就开始执行了,所以会出现Initialize failed: invalid dom

解决dom未加载出echarts开始初始化

<template>
<!-- echart需要操作dom来实现-->
    <div>
        <div rel="myEcharts" style=""></div>
    </div>
</template>
<script>
    //引入echarts
    const echarts = require('echarts')
    export defualt{
        data(){
            
        },
        mounted(){
            this.setMyEcharts()
        },
        methods:{
           setMyEcharts(){
               let pr = new Promise(resolve =>{
                   resolve()
               })
               pr.then(()=>{
                   let mychart = echarts.init(this.$rels.myEcharts)
                   //......
                   mychart.setOption(option)
               })                     
           }     
        },        
    }
</script>
<style>
</style>

办法很简单,就是一个异步操作

三、定时刷新数据

使用定时器,定时获取数据,并且渲染

<template>
<div>
    <div rel="mycharts" style="">
        
    </div>
    </div>
</template>
<script>
    const echarts = require('echarts')
    export defult{        
        data(){
            //假设x,y,x对应的data都要变
            x:[],
            inputData:[],
             y:[],
        },
        methods:{
            getInputData(){
                //从后端获取数据
                getAction('xxxx').then(res =>{
                    if(res.success){
                        this.x = res.x,
                        this.y = res.y,
                        this.inputData = res.data
                        this.setMycharts()
                    }else{
                        this.$messgae(res.error)
                    }
                })
            },
            setMycharts(){
                let pr = new Promise(resolve =>{
                    resolve()
                })
                pr.then(()=>{
                    let mycharts = echarts.init(this.$rels.mycharts)
                    let option ={
                        xAxis:{
                            type:'category',
                            data:this.x
                        },
                        yAxis:{
                            type:'value',
                            data:this.y
                        },
                        series:{
                            type:'bar',
                            data:this.inputData
                        }
                    }
                    mycharts.setOption(option)
                })
            }
        },
        mounted(){
            //定时器
            this.timer = setInterval(this.getInputData,10000)
        },
        beforeDestroy(){
            //销毁定时器
            clearInterval(this.timer)
        }
    }
</script>

四、x轴多条数据解决x轴标签文字过多导致显示不全/x轴旋转/x轴显示完全

echarts x轴标签文字过多导致显示不全/x轴旋转/x轴显示完全 这主要涉及两点:

1.x轴rotate 设置

下面直接放在echarts官网的的普通柱状图实例里,调整就明白了。注意对比去掉grid和axisLabel的不同效果。

interval:

坐标轴刻度标签的显示间隔(在类目轴中有效),默认会采用标签不重叠的方式显示标签(默认会将部分文字显示不全),可以设置为0强制显示所有标签,如果设置为1,表示隔一个标签显示一个标签,如果为3,表示隔3个标签显示一个标签,以此类推

rotate:

标签倾斜的角度,在类目轴的类目标签显示不全时可以通过旋转防止标签重叠旋转的角度是-90到90度

问题又来了,这个名称x轴的文字如果太长会受到遮挡,还是显示不全,这个时候可以用grid属性解决

option = {
    xAxis: {
        type: 'category',
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat3333', 'Su332'],
        axisLabel: {
        rotate: 45
        }
    },
    yAxis: {
        type: 'value'
    },
    series: [{
        data: [120, 200, 150, 80, 70, 110, 130],
        type: 'bar'
    }]
};

2.解决办法1:grid设置距下端有距离

旋转以后,文字如果名字太长就会被截断,这时设置axisLabel的height与lineHeight都没任何作用,这时就需要grid来解决

option = {
    xAxis: {
        type: 'category',
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat3333', 'Su332'],
        axisLabel: {
            rotate: 45
        }
    },
      grid: {
        left: "3%",
        top: 130,
        right: 60,
        bottom: 50,
        containLabel: true,
    },
    yAxis: {
        type: 'value'
    },
    series: [{
        data: [120, 200, 150, 80, 70, 110, 130],
        type: 'bar'
    }]
};

结果如图:

3、解决办法2:调用formatter文字竖直显示

 

axisLabel中使用formatter回调,formatter有两个参数,使用方法是这样的formatter:function(value,index){} ,value是类目(x轴上的data),index 是类目索引。

  axisLabel: {
      interval: 0, 
      formatter:function(value){
      return value.split("").join("\n");
      }
  }

这样的结果可以使文字都变成竖直的

 

五、webpack版本

经过我的失败,我发现打包echarts需要版本更高的,需要>webpack4.1.0版本以上的

重新安装webpack需要先卸载之前的:

npm unstall webpack

npm install webpack@4.1.0 --save-dev

提醒:别安装最新版本的webpack,若自己原先的版本较低(比如我这次是3.8,语法跟最新版有差别,就会出问题,出现版本冲突)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值