如何使用Echarts制作同一图可切换不同的X轴的效果
Admin 2022-07-05 群英技术资讯 595 次浏览
如果大家想实现如下图的效果那么久继续往下看吧,直接上动图!
因为项目需要展示的数据图表比较多我选择的是把每一张图表封装成一个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>
结束,完工
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
动态路由可以根据不同用户登录获取不一样的路由层级,可随时调配路由,下面这篇文章主要给大家介绍了关于vue实现动态路由的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
学习过 vue2 的宝子们肯定知道,组件传值是 vue 项目开发过程中必不可少的功能场景,在 vue2 里面有很多传值的方式。今天就来和大家讲讲Vue3的组件传值方式,需要的可以参考一下
目录前言关于边框关于控制点本章小结前言在上一章中我们已经搞定了下层画布,也就是能够对物体进行绘制了,现在就可以开始搞搞上层交互了。不过在和画布产生交互之前,我们还要做一件事情,就是让物体支持边框和控制点的绘制,亦即物体被选中时的状态,就像下面这样:这样一来如果要对物体进行一些操作,那就变成了对上图中的红色和蓝色边框进行
这篇文章主要介绍了chrome监听cookie变化与赋值问题,cookie监听与赋值操作需要manifest文件里声明权限问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
这篇文章主要介绍了JavaScript 定时器,在JavaScript中定时器有两个 setInterval() 与 setTimeout() 分别还有取消定时器的方法,下面来看看文章的详细介绍
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008