如何使用Echarts制作同一图可切换不同的X轴的效果
Admin 2022-07-05 群英技术资讯 883 次浏览
关于“如何使用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>
结束,完工
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
假设是使用nodejs+express3这个经典的组合。那么有一种非常方面的处理回调函数异常的方法:1.安装模块:express-domain-middleware2.增加例如以下的代码:app.use(require('express-domain-middleware'));app.use(functionerrorHandler(err,req,res,next){
request 和 response 对象的具体介绍:Request对象 -request对象表示HTTP请求,包含了请求查询字符串,参数,内容,HTTP头部等属性。常见属性有:req.app:当callback为外部文件时,用req.app访问express的实例req.baseUrl:获取路由当前安装的URL路径req.body/req.cookies:获得「请求主体
接金币游戏的游戏,相信不少朋友都有玩过,或者玩过类似的,也就是屏幕上方掉落进步,移动下方接金币区域来接住金币。那么如果我们用JavaScript如何实现呢?下面就给大家分享如何用JS做一个接金币游戏。
这篇文章主要为大家详细介绍了Vue仿百度搜索功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
js中有三个截取字符的方法,分别是substring()、substr()、slice(),平时我们可能都用到过,但总是会对这些方法有点混淆,特别是substring()和substr(),连方法名都差不多,下面就具体来看一下区别。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008