zoukankan      html  css  js  c++  java
  • vue项目中,使用echarts的一些总结

    vue项目中,使用了echarts的柱状图,折线图,饼图,雷达图等

    一、柱状图:

    <template>
      <div ref="readerAnalyze" id="reader_analyze_chart"></div>
    </template>
    
    <script>
    import echarts from 'echarts'
    import { getaReaderAnalysis } from '@/api/big-screen.js'
    export default {
      props: ['refresh'],
      data() {
        return {
    
        }
      },
      watch: {
        refresh() {
          setTimeout(() => {
            this._getaReaderAnalysis()
          }, 2000)
    
        }
      },
      mounted() {
        this._getaReaderAnalysis()
        this.initEchart()
      },
      methods: {
        initEchart() {                  //页面有多个echarts表,多个图表自适应
          window.addEventListener('resize', () => {
            this.chart = echarts.init(this.$refs.readerAnalyze);
            this.chart.resize();
          })
        },
        //	大屏数据—读者分析(最近一周)
        _getaReaderAnalysis() {
          getaReaderAnalysis().then(res => {
            if (res.data.errcode === 0) {
              let data = res.data.data
              //从小往大排序
              data = data.sort((a, b) => new Date(a.date) - new Date(b.date))
              this.readerAnalyzeChart(this.formatData(data))
            }
          })
        },
        //格式化数据
        formatData(data) {
          let date = []
          let total = []
          let newAdd = []
          for (let i = 0; i < data.length; i++) {
            date.push(data[i].date)
            total.push(data[i].total)
            newAdd.push(data[i].newAdd)
          }
          let readerTrend = {
            date: date,
            total: total,
            newAdd: newAdd
          }
          return readerTrend
        },
        readerAnalyzeChart(data) {
          let readerAnalyzeChart = echarts.init(this.$refs.readerAnalyze)
          let option = {
            tooltip: {
              trigger: 'axis',
              axisPointer: {            // 坐标轴指示器,坐标轴触发有效
                type: 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
              }
            },
            grid: {
              top: '50',        //图表内容距上下左右的距离,可设置top,left,right,bottom
              bottom: '5%',
              containLabel: true
            },
            legend: {
              data: ['读者总量', '当日增加'],
              textStyle: {
                color: '#fff',
                fontWeight: 'bold'
              }
            },
            toolbox: {
              show: true,
            },
            calculable: true,
            xAxis: [
              {
                type: 'category',
                axisLine: {
                  lineStyle: {             //x轴颜色和字体大小
                    color: '#fff',
                    fontSize: '12'
                  }
                },
                axisTick: { show: false },
                axisLabel: {               //x轴参数旋转角度
                  interval: 0,
                  rotate: 40
                },
                data: data.date
              }
            ],
            yAxis: [
              {
                type: 'value',
                splitLine: {           
                  lineStyle: {      //y轴参考线颜色,如果要隐藏,可设置为  color: "none"
                    color: '#415175'
                  }
                },
                axisLine: {
                  lineStyle: {
                    color: '#fff'
                  }
                },
              }
            ],
            series: [
              {
                name: '读者总量',
                type: 'bar',
                barWidth: '25%',         //设置柱状图宽度
                itemStyle: {
                  normal: {
                    label: {
                      show: true,
                      position: 'top',    
                      textStyle: {
                        color: '#fff'
                      }
                    },
                    color: new echarts.graphic.LinearGradient(         //柱状图颜色渐变
                      0, 0, 0, 1,
                      [
                        { offset: 0, color: '#FAB501' },
                        { offset: 1, color: '#F75027' }
                      ]
                    )
                  }
                },
                data: data.total
              },
              {
                name: '当日增加',
                type: 'bar',
                barWidth: '25%',
                itemStyle: {
                  normal: {
                    color: '#2AA2D5',       //柱状图颜色
                    label: {
                      show: true,
                      position: 'top',
                      textStyle: {
                        color: '#fff'
                      }
                    }
                  }
                },
                data: data.newAdd
              }
            ]
          };
          readerAnalyzeChart.setOption(option)
        }
      }
    }
    </script>
    

     图表:

    如果要实现柱状图横向,可设置:

      将xAxis的type设置为value, 将yAxis的type设置为category即可实现横向显示

    二、雷达图:

     bookCategory(data){
                    let bookCategoryChart = echarts.init(document.getElementById('book-category'))
                    let option = {
                        tooltip: {
                            trigger: 'item',
                            position:function(p){    //其中p为当前鼠标的位置
                                return [p[0], p[1]];
                            },
                        },
                        legend: {
                            orient: 'vertical',
                            right: '2%',
                            textStyle: {
                                color:'#DFE0E5',
                                fontWeight: 'bold'
                            },
                            data: ['书刊类别分布', '借阅类别分布']
                        },
                        radar: {
                            splitNumber: 2, // 雷达图圈数设置
                            center: ['45%','50%'],
                            radius : '65%',
                            name: {
                                textStyle: {
                                    color: '#DFE0E5',
                                    backgroundColor: '#121E36'
                                }
                            },
                            indicator: data.indicator,
                            splitArea : {
                                show : false,
                                areaStyle : {
                                    color: 'rgba(255,0,0,0)', // 图表背景的颜色
                                },
                            },
                        },
                        series: [{
                            name: '书刊类别 vs 借阅类别',
                            type: 'radar',
                            data : [
                                {
                                    value : data.bookCat,
                                    name : '书刊类别分布',
                                    itemStyle: {
                                        normal: {
                                            color:'#F75325'  //显示颜色与填充颜色对应
                                        }
                                    },
                                    areaStyle: {
                                        normal: {
                                            color: '#F75325'    //填充的颜色
                                        }
                                    }
                                },
                                {
                                    value : data.borrowCat,
                                    name : '借阅类别分布',
                                    itemStyle: {
                                        normal: {
                                            color:'#7B52CC'
                                        }
                                    },
                                    areaStyle: {
                                        normal: {
                                            color: '#7B52CC'
                                        }
                                    }
                                }
                            ]
                        }]
                    };
                    bookCategoryChart.setOption(option)
                }

    图表 :

    最后,echarts图表的自适应:

    echart图表本身是提供了一个resize的函数,当浏览器发生resize事件的时候,让其触发echart的resize事件,重绘canvas

    用window.onresize = myChart.resize; 可以完成echarts图表的自适应,

    如果是多个echarts图表,就会发现只有最后一个图表能自适应,所以需使用  addEventListener监听所有图表:

    mounted:{
         this.initEchart()
    },
    methods:{
         initEchart(){
                    window.addEventListener('resize',()=>{
                        this.chart = echarts.init(this.$refs.bookTotalChart);
                        this.chart.resize();
                    })
           }
    }
    

      

  • 相关阅读:
    面试题
    面试题-基础篇(1)
    Windows定时器学习
    C++中类的多态与虚函数的使用
    Win32 SDK 编程开始, 创建窗口, 消息的处理, 消息循环
    线程同步(互斥锁与信号量的作用与区别)
    控制台程序实现暂停功能
    Linux下gcc编译生成动态链接库*.so文件并调用它
    Linux下安装ActiveMQ CPP
    activemq Linux下的编译
  • 原文地址:https://www.cnblogs.com/wangdashi/p/9777029.html
Copyright © 2011-2022 走看看