vue使用Echart线柱混合图排坑记录

 更新时间:2023年10月08日 10:36:31   作者:光法V3  
这篇文章主要为大家介绍了vue使用Echart线柱混合图排坑记录,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

使用Echart线柱混合图排坑记录

在Vue中使用Echart

官方文档

https://echarts.apache.org/zh/option.html#title

安装

//vue 2 
    npm install echarts vue-echarts
    npm i -D @vue/composition-api
    //vue 3
    npm install echarts vue-echarts

引用

//可全局也可在要使用的文件中用
import { use } from 'echarts/core'
import { CanvasRenderer } from 'echarts/renderers'
import { PieChart } from 'echarts/charts'
import {
  TitleComponent,
  TooltipComponent,
  LegendComponent
} from 'echarts/components'
import ECharts, { THEME_KEY } from 'vue-echarts'
use([
  CanvasRenderer,
  PieChart,
  TitleComponent,
  TooltipComponent,
  LegendComponent
])

完整示例

这是一个简单折线图的示例,想要触发重绘的话直接设置data的options即可。

注意:Echart必须要设置高度,否则会出现异常情况,出现白屏的现象

<template>
  <v-chart class="chart" :option="options" />
</template>
<script>
import ECharts from 'vue-echarts'
import 'echarts'
export default {
  components: {
    'v-chart': ECharts,
  },
  data() {
    return {
    options: {
  xAxis: {
    type: "category",
    data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
  },
  yAxis: {},
  series: [{
    data: [820, 932, 901, 934, 1290, 1330, 1320],
    type: "line"
  }]
    }
}
  },
}
</script>
<style scoped>
.chart {
  height: 400px;
}
</style>

这里我们进入正题,折柱混合情况,其实也是所有的各类混合图都会遇到的问题

标准的或者说是官方示例

<template>
  <v-chart class="chart" :option="options" />
</template>
<script>
import ECharts from 'vue-echarts'
import 'echarts'
export default {
  components: {
    'v-chart': ECharts,
  },
  data() {
    return {
    options: {
    legend: {
      data: ['蒸发量', '降水量']
    },
    xAxis: [
      {
        type: 'category',
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
        axisPointer: {
          type: 'shadow'
        }
      }
    ],
  yAxis: [
    {
      type: 'value',
      name: 'Precipitation',
      min: 0,
      max: 250,
      interval: 50,
      axisLabel: {
        formatter: '{value} ml'
      }
    }
  ],
  series: [
    {
      name: '蒸发量',
      type: 'bar',
      tooltip: {
        valueFormatter: function (value) {
          return value + ' ml';
        }
      },
      data: [
        2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3
      ]
    },
    {
      name: '降水量',
      type: 'line',
      tooltip: {
        valueFormatter: function (value) {
          return value + ' ml';
        }
      },
      data: [
        2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3
      ]
    }
  ]
}
}
  },
}
</script>
<style scoped>
.chart {
  height: 400px;
}
</style>

看效果是不是觉得很完美,但是现实会遇到各种各样的问题

  • 第一个问题:两个视图的x轴不一致情况,比如说蒸发量没有二月份数据,这种情况下这样子的代码显示就不行了。

这个问题看了下官方文档找到解决方案就是使用值和x轴的值去对应,官方说明如下:

『值』与 轴类型 的关系:

  • 当某维度对应于数值轴(axis.type 为 'value' 或者 'log')的时候:

    其值可以为 number(例如 12)。(也可以兼容 string 形式的 number,例如 '12'

当某维度对应于类目轴(axis.type 为 'category')的时候:

其值须为类目的『序数』(从 0 开始)或者类目的『字符串值』。例如:

xAxis: {
      type: 'category',
      data: ['星期一', '星期二', '星期三', '星期四']
  },
  yAxis: {
      type: 'category',
      data: ['a', 'b', 'm', 'n', 'p', 'q']
  },
  series: [{
      data: [
          // xAxis    yAxis
          [  0,        0,    2  ], // 意思是此点位于 xAxis: '星期一', yAxis: 'a'。
          [  '星期四',  2,    1  ], // 意思是此点位于 xAxis: '星期四', yAxis: 'm'。
          [  2,       'p',   2  ], // 意思是此点位于 xAxis: '星期三', yAxis: 'p'。
          [  3,        3,    5  ]
      ]
  }]
// 在数据进来之后处理下数据
     // 1. 遍历各个视图的数据元,把x轴的值合并去重,然后排序,
     // 2. 给各个series设置对应的值,值每个项对应[`${item[0]}`, item[1]],就是把x轴转为字符串,然后对应y轴的值。
    render(data) {
      if (Object.keys(data).length) {
        let xdata = []
        for (let i = 0; i < this.keys.length; i++) {
          let key = this.keys[i]
          this.options.series[i].data = data[key]
            ? data[key].map(item => [`${item[0]}`, item[1]])
            : []
          let date = data[key] ? data[key].map(item => `${item[0]}`) : []
          xdata = [...xdata, ...date]
          this.options.series[i].name = key
        }
        xdata = Array.from(new Set(xdata))
        this.options.xAxis.data = xdata ? xdata.sort((a, b) => a - b) : []
      } else {
        this.clearChart()
      }
    },
    clearChart() {
      if (this.init) {
        this.$refs.chart.clear()
      }
    },

提测,感觉没啥问题,x轴排序了,然后x轴和y轴也一一对应了。但是打脸来的飞快,线图是乱的

贴个示意图

看了下发现数据源是没排过序的,所以,x轴排序了,x和y的值也是对应的,但是线图的点是顺序画的,所以要先对数据源进行排序才行

// 在数据进来之后处理下数据
     // 1. 先将数据按照x轴大小进行排序,保证x轴数据从小到大展示
     // 2. 遍历各个视图的数据元,把x轴的值合并去重,然后排序,
     // . 给各个series设置对应的值,值每个项对应[`${item[0]}`, item[1]],就是把x轴转为字符串,然后对应y轴的值。
    render(data) {
      if (Object.keys(data).length) {
        let xdata = []
        for (let i = 0; i < this.keys.length; i++) {
          let key = this.keys[i]
          // 先将数据按照x轴大小进行排序,保证x轴数据从小到大展示
          list[key] && (list[key] = list[key].sort((a, b) => a[0] - b[0]))
          this.options.series[i].data = list[key]
            ? list[key].map(item => [`${item[0]}`, item[1]])
            : []
          let date = data[key] ? data[key].map(item => `${item[0]}`) : []
          xdata = [...xdata, ...date]
          this.options.series[i].name = key
        }
        xdata = Array.from(new Set(xdata))
        this.options.xAxis.data = xdata ? xdata.sort((a, b) => a - b) : []
      } else {
        this.clearChart()
      }
    },
    clearChart() {
      if (this.init) {
        this.$refs.chart.clear()
      }
    },

以上就是vue使用Echart线柱混合图排坑记录的详细内容,更多关于vue Echart线柱混合图的资料请关注脚本之家其它相关文章!

相关文章

  • vue中如何动态绑定图片,vue中通过data返回图片路径的方法

    vue中如何动态绑定图片,vue中通过data返回图片路径的方法

    下面小编就为大家分享一篇vue中如何动态绑定图片,vue中通过data返回图片路径的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • webstorm建立vue-cli脚手架的傻瓜式教程

    webstorm建立vue-cli脚手架的傻瓜式教程

    这篇文章主要给大家介绍了关于webstorm建立vue-cli脚手架的傻瓜式教程,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 详解Vue 多级组件透传新方法provide/inject

    详解Vue 多级组件透传新方法provide/inject

    这篇文章主要介绍了详解Vue 多级组件透传新方法provide/inject,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • vue 插件的方法代码详解

    vue 插件的方法代码详解

    在开发项目的时候,我们一般都用 vue-cli 来避免繁琐的 webpack 配置和 template 配置。这篇文章主要介绍了如何写一个 vue 插件,需要的朋友可以参考下
    2019-06-06
  • vue中table多选/单选行,获取其数据方式

    vue中table多选/单选行,获取其数据方式

    这篇文章主要介绍了vue中table多选/单选行,获取其数据方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • vue 实现手动分割日期

    vue 实现手动分割日期

    这篇文章主要介绍了vue 实现手动分割日期,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Vue监听使用方法和过滤器实现

    Vue监听使用方法和过滤器实现

    这篇文章主要介绍了Vue监听使用方法和过滤器实现,过滤器为页面中数据进行强化,具有局部过滤器和全局过滤器
    2022-06-06
  • @error函数vue图片加载失败空白页解决方案

    @error函数vue图片加载失败空白页解决方案

    这篇文章主要介绍了@error函数vue图片加载失败空白页解决方案,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Vue.use的原理和设计源码探究

    Vue.use的原理和设计源码探究

    这篇文章主要为大家介绍了Vue.use的原理和设计源码探究详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • vue实现图片拖拽及鼠标滚轮放大缩小的示例代码

    vue实现图片拖拽及鼠标滚轮放大缩小的示例代码

    本文主要给大家介绍如何vue实现图片拖拽及鼠标滚轮放大缩小,文中有详细的代码供大家参考,对我们的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-08-08

最新评论