前端-如何用echarts绘制含有多个分层的波形图

一、效果图展示

先展示一下实际的效果图

用户选择完需要的波形参数字段之后,页面开始渲染图表,有几个参数就要渲染几个grid,也就是几行波形。

二、绘制逻辑

拿到所选的参数数据之后

1.首先是给横坐标轴的里程-数据注入

2.修改tooltip(跟着竖线走的卡片弹窗)里面的弹出窗的显示,需要返回html模板字符串

3.修改datazoom(最底下的蓝色滑动窗),里面初始的起点和终点

4.按照参数的个数添加grid(每一行的波形),需要叠加计算的是,距离bottom的高度,一个距离100,2个距离200

5.按照参数的个数添加xAxis里面的对象   (需要修改 gridIndex 0 1 2 ...)
只有第一个对象,要显示X轴坐标,且同时要判断X轴坐标是否包含车站
第二个对象开始不显示xAxis坐标轴

6.修改y轴 (可显示刻度)(需要修改 gridIndex 0 1 2 ...)

7.最后修改series 每个参数是一个对象的配置(包括数据,线条的类型,颜色)


(值得注意的是,这套绘制,建议放置在一个函数里,然后加载时调用,重新绘制时调用,需要注意重新绘制时,除了要myChart.dispose(); //销毁,还要重新配置option)

三、关键代码

绘制逻辑代码:

const self = this;//重新给图标赋值数据this.tableData.forEach(function (currentValue, index, array) {// 4.按照参数的个数添加grid,需要叠加计算的是,距离bottom的高度,一个距离100,2个距离200let height = (index+1)*100;if(index===array.length-1){self.option.grid.push({show:true, left: 50,right: 50,bottom: height,height: 100, //每一个折现图的高度backgroundColor: index % 2 === 1 ? '#f0f0f0' : 'white',  // 背景色})}else{self.option.grid.push({show:true, left: 50,right: 50,bottom: height,height: 100, //每一个折现图的高度backgroundColor: index % 2 === 1 ? '#f0f0f0' : 'white',  // 背景色})}// 5.按照参数的个数添加xAxis里面的对象   (需要修改 gridIndex 0 1 2 ...)// !!!只有第一个对象,要显示X轴坐标,且同时要判断X轴坐标是否包含车站// 第二个对象开始不显示坐标轴if(index==0){self.option.xAxis.push({gridIndex: 0, //x 轴所在的 grid 的索引type: 'category', //类目轴boundaryGap: false, //坐标轴两边留白策略,axisLine: {//是否显示坐标轴轴线。onZero: false,lineStyle: {color: 'black',width: 2,},},//车站标注axisLabel: {// interval: 0,//自适应X轴间距formatter: function (params) {// 自定义div// console.log(typeof(params))let res;if (params.includes('站')) {res = '{abg11|' + params + '}';} else {res = '{abg1|' + params + '}';}return res;},rich: {abg11: {backgroundColor: '#2B8AFD',width: '100%',align: 'right',height: 22,borderRadius: 3,padding: [2, 4, 2, 4],color: '#ffffff',},abg1: {color: '#595959',},},},data: xData,show: true, //是否显示 x 轴。})}else{self.option.xAxis.push({gridIndex: index, //x 轴所在的 grid 的索引type: 'category', //类目轴boundaryGap: false, //坐标轴两边留白策略,axisLine: {onZero: true, //X 轴的轴线是否在另一个轴的 0 刻度上,只有在另一个轴为数值轴且包含 0 刻度时有效。lineStyle: {color: '#979797',},},data: xData,show: true, //是否显示 x 轴。axisTick: {//坐标轴刻度相关设置show: false,},axisLabel: {//刻度标签show: false,},})}// 6.修改y轴 (可显示刻度)(需要修改 gridIndex 0 1 2 ...)self.option.yAxis.push({gridIndex: index, //y 轴所在的 grid 的索引type: 'value',// name: "PM2.5",//纵坐标名字// nameLocation: "middle",//纵坐标名字的位置// nameGap: 30,//纵坐标名字与轴线之间的距离position: 'left', //y轴的位置inverse: false,splitLine: {//坐标轴在 grid 区域中的分割线show: false,},axisLine: { //坐标轴轴线相关设置  竖着那一根show: true,lineStyle: {color: '#979797',},},axisTick: {//坐标轴刻度相关设置show: false,},axisLabel: {//刻度标签show: false,},},)// 7.最后修改series 每个参数是一个对象self.option.series.push({//参数的名字-数据注入name: currentValue.name,type: 'line',color: self.colorArray[index],// 设置不显示小圆圈symbol: 'none',showSymbol: false,xAxisIndex: index, //使用的 x 轴的 index,在单个图表实例中存在多个 x 轴的时候有用。yAxisIndex: index, //使用的 y 轴的 index,在单个图表实例中存在多个 x 轴的时候有用。symbolSize: 8, //标记的大小//   hoverAnimation: false,smooth: true, //平滑曲线//每个grid的数据-数据注入data: currentValue.data,markLine: {symbol: 'none', //去掉箭头//最大值和最小值data: [{// type: 'median', //中位数。type: 'average', //中位数。symbol: 'none', //去掉开始的原点label: {//字体设置show: 'true',position: 'insideEndTop',distance: 10,formatter: currentValue.name,color: 'inherit',},lineStyle: {//横线设置width: 1,},},],},lineStyle: {shadowColor: self.colorArray[index], //透明的颜色shadowOffsetX: 0,shadowOffsetY: 0,opacity: 0.8, //透明度shadowBlur: 8, //阴影大小type: "solid", //实线width: 2,},})});this.getHeight(this.tableData.length)//重新获得动态的图表高度//折线图this.$nextTick(()=>{this.getChart();//实际绘制})

动态高度函数代码:

//获得动态高度getHeight(num){this.dynamicHeight = `${num * 100 + 150}px`;},

绘制代码:

//绘制折线图getChart() {const chartDom = document.getElementById('main-echarts');if (myChart != null && myChart != '' && myChart != undefined) {console.log("销毁了");myChart.dispose(); //销毁}// // 显示加载图// myChart.showLoading();this.$nextTick(()=>{myChart = echarts.init(chartDom);myChart.setOption(this.option, true);})window.addEventListener('resize', function () {myChart.resize();});}

 Y轴名字显示且竖直放置:

// 6.修改y轴 (可显示刻度)(需要修改 gridIndex 0 1 2 ...)self.option.yAxis.push({gridIndex: index, //y 轴所在的 grid 的索引type: 'value',name: currentValue.name.toString().split("").join("\n"),//纵坐标名字竖直从上到下排列nameRotate:0,nameTextStyle: {padding: 10, // 设置与坐标轴的距离,单位为像素color: 'black', // 这里设置颜色},nameLocation: "middle",//纵坐标名字的位置nameGap: 40,//纵坐标名字与轴线之间的距离position: 'left', //y轴的位置inverse: false,splitLine: {//坐标轴在 grid 区域中的分割线show: false,},axisLine: { //坐标轴轴线相关设置  竖着那一根show: true,lineStyle: {color: '#979797',},},axisTick: {//坐标轴刻度相关设置show: false,},axisLabel: {//刻度标签show: true,showMinLabel: false, // 隐藏最小值标签showMaxLabel: false, // 隐藏最大值标签},},)

弹窗显示为半透明

 this.option = {//鼠标放上去显示的弹窗tooltip: {trigger: 'axis', //坐标系出触发backgroundColor: 'rgba(255, 255, 255, 0.7)', // 设置白色的半透明背景

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/295825.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5.OpenResty系列之深入理解(一)

本文基于Centos8进行实践,请读者自行安装OpenResty。 1. 内部调用 进入默认安装路径 cd /usr/local/openresty/nginx/conf vim nginx.conflocation /sum {# 只允许内部调用internal;content_by_lua_block {local args ngx.req.get_uri_args()ngx.print(tonumber…

显卡之争!英伟达和AMD下场互掐!GPU霸主地位是否能保?

大家好,我是二狗。 英伟达和AMD这两家芯片巨头掐起来啦! 事情的起因是,两周前AMD董事会主席兼CEO苏姿丰在一场活动中发布了用于生成式AI和数据中心的新一代Intinct MI300X GPU芯片加速卡。 单单发布显卡没啥问题,但是AMD声称MI300…

1857_什么是AEC-Q100认证

Grey 全部学习内容汇总: GitHub - GreyZhang/g_hardware_basic: You should learn some hardware design knowledge in case hardware engineer would ask you to prove your software is right when their hardware design is wrong! 1857_什么是AEC-Q100认证 经…

生成式AI大爆发,2024年人工智能3大发展趋势预测

人工智能(AI)多年来一直是技术界讨论的热门话题,但在2023年,它完全抓住了大众的注意力和想象力。ChatGPT和类似的技术让外行人也能接触到人工智能,生成式AI以前所未有的速度从小众走向主流。在大家都普遍认为AI存在着能力局限性的情况下&…

天文与计算机:技术的星辰大海

天文与计算机:技术的星辰大海 一、引言 在人类的历史长河中,天文学与计算机技术这两个领域似乎相隔甚远,然而在科技的推动下,它们却逐渐走到了一起,为人类对宇宙的探索开辟了新的道路。天文观测的复杂度与数据量随着…

推荐算法架构7:特征工程(吊打面试官,史上最全!)

系列文章,请多关注 推荐算法架构1:召回 推荐算法架构2:粗排 推荐算法架构3:精排 推荐算法架构4:重排 推荐算法架构5:全链路专项优化 推荐算法架构6:数据样本 推荐算法架构7:特…

中级软件设计师-note-2

一个逆向思维的例子是 “当遇到一个问题时,通常人们会想办法解决这个问题。但逆向思维是指反过来考虑,即想办法制造更多的问题。 举个例子,假设有一个团队正在开发一款新的智能手机。传统的思维方式可能是专注于如何增加手机的功能&#xf…

Log4net 教程

一、Log4net 教程 在CodeProject上找到一篇关于Log4net的教程:log4net Tutorial,这篇博客的作者是:Tim Corey ,对应源代码地址为: https://github.com/TimCorey/Log4netTutorial,视频地址为:Ap…

安装Kubernetes1.23、kubesphere3.4、若依项目自动打包部署到K8S记录

1.安装kubernetes1.23详细教程 kubernetes(k8s)集群超级详细超全安装部署手册 - 知乎 2.安装rancher动态存储 kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml3.安装kubesphere3.4 准备工作 您…

matlab时间转换

采集的GNSS数据是10hz的。 data(选取其中一部分)如下: (1)char类型 formatOut yyyy-mm-dd HH:MM:SS; str datestr(data,formatOut); str如下: (2)double类型 DateVector dat…

小白入门之安装NodeJS

重生之我在大四学JAVA 第五章 安装NodeJS 如果你在购买我闲鱼的程序,请尽量使用node14版本 修改安装路径 接着傻瓜式NEXT 测试是否安装成功 如果上面没提示版本号,就按照前两章配置环境变量步骤配置下环境变量 设置镜像地址 npm config set re…

pip 常用指令 pip cache 命令用法介绍

📑pip 常用命令归类整理 pip cache 是一个用于管理pip缓存的命令。pip是Python的包管理器,用于安装和管理Python包。当你使用pip安装一个包时,pip会首先在其缓存中查找该包。如果在缓存中找到,pip将从缓存中安装该包,…