Echarts实现一张图现切换不同的X轴(实例代码)

 更新时间:2021年11月04日 10:53:23   作者:聪明不喝牛奶  
这篇文章主要介绍了Echarts 如何实现一张图现切换不同的X轴,通过动图给大家展示效果,实例代码相结合给大家介绍的非常详细,需要的朋友可以参考下

效果图

如果大家想实现如下图的效果那么久继续往下看吧,直接上动图!

请添加图片描述

方法

因为项目需要展示的数据图表比较多我选择的是把每一张图表封装成一个vue组件来引用。
先上一个完整的代码,引用时注意在从数据库获取数据是要换成自己的数据库以及要自己定义好你需要的对象加到你设定好的数组中:

<template>
  <div>
    <div id="main" style="height:350px;width:100%"></div>
  </div>
</template>
<script>
import echarts from 'echarts'
export default {
 data() {
    return {
      ans:[],
      // dayX: [], // 当天的 X轴
      weekX: [], // 当周的 X轴
      monthX: [], // 当月的 X轴
      yearX: [], // 当年的 X轴
      timeX:[],//任意时间段的X轴
      dataY: [] // Y 轴
    }
  },
 created() {
    this.fetchData()
  },
  
methods: {
//获取数据库中的数据
    fetchData() {
    this.axios({
          method: 'GET',
          url: 'http://localhost:8080/xxxx/xxxx' }).then(function(resp) {
          console.log("oxygen ===>",resp.data)
          let num = resp.data.length //获取数组的长度
          for (let i = 0; i <num; i++) {
            //创建一个对象
            let arr = {}
            arr.timeX = resp.data[i].chkDate.slice(5, 10)
            arr.timeY = resp.data[i].oxgnSaturation
            vm.ans.push(arr)

          }

        })
     },
       init(dataX, dataY) {
      this.myChart = echarts.init(document.getElementById('main'))

      let option = {
        legend: {
          icon: 'stack',
          // data: ['当天', '当月', '当年'],
          data: ['当周', '当月','当年','所选时间段'],
          selectedMode: 'single', // 单选
          selected: {
            当周: true,
            当月: false,
            当年: false,
            所选时间段: false
          }
        },
        tooltip: {
          trigger: 'axis',
          axisPointer: {
            type: 'cross'
          },
          //自定义显示标签
          formatter:function(params) {
            return params[0].name + '<br>血氧 : '+params[0].data+' %'
          }
        },
        // 工具栏
        toolbox: {
          feature: {
            saveAsImage: {} //可对折线图进行截图保存
          }
        },
        grid: {
          left: 10, //组件距离容器左边的距离
          right: 10,
          top: 30,
          bottom: 20,
          containLabel: true
        },

        dataZoom: [ //通过鼠标控制折线图的放大缩小
          {
            show: true,
            type: 'inside',
            filterMode: 'none',
            xAxisIndex: [0]

          },
          {
            show: true,
            type: 'inside',
            filterMode: 'none',
            yAxisIndex: [0]

          }
        ],
        xAxis: {
          type: 'category',
          miniInterval: 3,
          boundaryGap: false,
          axisTick: {
            show: false
          },
          splitLine: {
            // X 轴分隔线样式
            show: true,
            lineStyle: {
              color: ['#f3f0f0'],
              width: 1,
              type: 'solid'
            }
          },
          data: dataX
        },
        yAxis: [
          {
            name: "血氧趋势图",
            type: 'value',
            splitLine: {
              // Y 轴分隔线样式
              show: true,
              lineStyle: {
                color: ['#f3f0f0'],
                width: 1,
                type: 'solid'
              }
            }
          }
        ],
        series: dataY

      }
      
  		this.myChart.on('legendselectchanged', obj => {
        var options = this.myChart.getOption()
        //这里是选择切换什么样的x轴,那么他会进行对Y值的切换
        if (obj.name == '当周'){
          options.xAxis[0].data = this.weekX
        }else if (obj.name == '当月'){
          options.xAxis[0].data = this.monthX
        }else if (obj.name == '当年'){
          options.xAxis[0].data = this.yearX
        }else if (obj.name == '所选时间段'){
          options.xAxis[0].data = this.timeX
        }

        this.myChart.setOption(options, true)
      })

      // 使用刚指定的配置项和数据显示图表。
      this.myChart.setOption(option)

			
  },
    mounted() {

    setTimeout(() => {
      this.$nextTick(() => {

        this.monthX = (this.res.map(item => item.monthX)).filter(Boolean) //过滤掉undefined、NaN、null、空串
        this.weekX = (this.res.map(item => item.weekX)).filter(Boolean) //过滤掉undefined、NaN、null、空串
        this.yearX = (this.res.map(item => item.yearX)).filter(Boolean) //过滤掉undefined、NaN、null、空串
        this.timeX = (this.ans.map(item => item.timeX)).filter(Boolean) //过滤掉undefined、NaN、null、空串

        //对dataY进行赋值,如果这里想一个X轴对应多个Y值那么可以在加一个{}
        this.dataY.push({
          name: '当月',
          type: 'line', // 直线ss
          itemStyle: {
            normal: {
              color: '#2E2E2E',
              lineStyle: {
                color: '#2E2E2E',
                width: 2
              }
            }
          },
          data: this.res.map(item => item.monthY)
        })

        this.dataY.push({ //这边就可以自定义一个折线显示的方式和颜色
          name: '当周',
          type: 'line',
          itemStyle: {
            normal: {
              color: '#FF0000',
              lineStyle: {
                color: '#FF0000',
                width: 2
              }
            }
          },
          data: this.res.map(item => item.weekY)
        })


        this.dataY.push({ //这边就可以自定义一个折线显示的方式和颜色
          name: '当年', //这个必须和lengen 那边的保持一致才行 
          type: 'line',
          itemStyle: {
            normal: {
              color: '#0404B4',
              lineStyle: {
                color: '#0404B4',
                width: 2
              }
            }
          },
          data: this.res.map(item => item.yearY)
        })

        this.dataY.push({ //这边就可以自定义一个折线显示的方式和颜色
          name: '所选时间段',
          type: 'line',
          itemStyle: {
            normal: {
              color: '#DF01D7',
              lineStyle: {
                color: '#DF01D7',
                width: 2
              }
            }
          },
          data: this.ans.map(item => item.timeY)
        })

        this.init(this.weekX, this.dataY) //初始化的数据显示
        window.onresize = this.myChart.resize //窗口大小图标自适应
      })
    }, 1000)
  }
}
</script>

结束,完工

到此这篇关于Echarts 如何实现一张图现切换不同的X轴的文章就介绍到这了,更多相关Echarts 实现一张图现切换不同的X轴内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决Vue.js父组件$on无法监听子组件$emit触发事件的问题

    解决Vue.js父组件$on无法监听子组件$emit触发事件的问题

    今天小编就为大家分享一篇解决Vue.js父组件$on无法监听子组件$emit触发事件的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • 详解vue v-model

    详解vue v-model

    这篇文章主要介绍了vue v-model的相关资料,帮助大家更好的理解和学习vue,感兴趣的朋友可以了解下
    2020-08-08
  • 详解Vue-cli3.X使用px2rem遇到的问题

    详解Vue-cli3.X使用px2rem遇到的问题

    这篇文章主要介绍了详解Vue-cli3.X使用px2rem遇到的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Vue+Echarts实现绘制动态折线图

    Vue+Echarts实现绘制动态折线图

    这篇文章主要为大家详细介绍了如何利用Vue和Echarts实现绘制动态折线图,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-03-03
  • vue控制滚动条滑到某个位置的方法实例

    vue控制滚动条滑到某个位置的方法实例

    当容器有滚动条时,有时需要将滚动条滑到某个位置,下面这篇文章主要给大家介绍了关于vue控制滚动条滑到某个位置的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • 简述vue中的config配置

    简述vue中的config配置

    这篇文章主要介绍了vue中的config配置 ,本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    2018-01-01
  • vue实现后台管理权限系统及顶栏三级菜单显示功能

    vue实现后台管理权限系统及顶栏三级菜单显示功能

    这篇文章主要介绍了vue实现后台管理权限系统及顶栏三级菜单显示功能,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • vue中的Router基本配置命令实例详解

    vue中的Router基本配置命令实例详解

    Vue的Router是一个用于实现页面跳转和路由管理的插件,它可以帮助我们根据不同的URL请求加载不同的组件,以及实现前端路由功能,本文给大家介绍vue中的Router基本配置命令,感兴趣的朋友跟随小编一起看看吧
    2024-02-02
  • Vue使用虚拟键盘及中英文切换功能

    Vue使用虚拟键盘及中英文切换功能

    这篇文章主要给大家介绍了关于Vue使用虚拟键盘及中英文切换的相关资料,有时候在大型触屏设备(如双屏设备)中往往就没有键盘去操作,所以就需要去建立一个虚拟键盘去操作,需要的朋友可以参考下
    2023-06-06
  • 基于Vue3实现旋转木马动画效果

    基于Vue3实现旋转木马动画效果

    这篇文章主要为大家介绍了如何利用Vue3实现旋转木马的动画效果,文中的示例代码讲解详细,对我们学习Vue有一定的帮助,需要的可以参考一下
    2022-05-05

最新评论