echarts——折线图实现不同区间不同颜色+下钻/回钻功能——技能提升

news2024/11/20 6:31:04

echarts——折线图实现不同区间不同颜色+下钻/回钻功能——技能提升

  • 需求场景
  • 解决步骤1:安装echarts插件
  • 解决步骤2:html代码
  • 解决步骤3:封装option配置和initChart渲染方法
  • 解决步骤4:回钻功能

需求场景

最近在写后台管理系统时,遇到一个需求,就是要展示一个折线图。

在这里插入图片描述
注意:
1.折线图分两种颜色,前一部分是实际数据,要用orange颜色,后一部分是预测数据,要用红色展示。
在这里插入图片描述
2.点击某一个月份时,要下钻到当月的每一天的数据上,且数据要实现自动轮播展示
在这里插入图片描述
3.点击返回按钮,可以回钻到月份折线图上

下面介绍解决步骤:

解决步骤1:安装echarts插件

npm install echarts@5.4.0 --save

解决步骤2:html代码

<a-card style="margin-top: 10px">
  <div style="display: flex;justify-content: space-between;align-items: center;">
    <h3>下单金额下降</h3>
    <a-button
      v-if="renderBackFlag"
      type="primary"
      size="small"
      id="return-button"
      @click="renderBack"
      >返回</a-button>
  </div>
  <div id="lineId1" class="pieCls"></div>
</a-card>

解决步骤3:封装option配置和initChart渲染方法

import * as echarts from 'echarts';
export default {
	data(){
		return{
			renderBackFlag: false,
			byMonth: {
				realData:['23/7','23/8','23/9','23/10','23/11','23/12','24/1'],//实际数据的月份
				predictionData:['24/2','24/3','24/4'],//预测数据的月份
			},
			renderObj: {
				monthArr:['23/7','23/8','23/9','23/10','23/11','23/12','24/1','24/2','24/3','24/4'],
				monthTotal:[0,0,0,0,0,243645,2035.1318,1175.732,1256.81,324.34],
				dateArr:['7/1','7/2','7/3',...,'4/29','4/30'], 
				monthDate:{
					'23/7':['7/1','7/2','7/3',...,'7/31'],
					'23/8':['8/1','8/2','8/3',...,'8/31'],
					...
					'24/4':['4/1','4/2','4/3',...,'4/30']
				},
				monthValue:{
					'23/7':[222,333,44,...,211],
					'23/8':[2333,55,77,...,444],
					...
					'24/4':[244,66,11,...,833]
				}
			},
		}
	}
}
renderLine() {
  let dom = document.getElementById('lineId1');
  let myChart = echarts.init(dom);
  let option = this.getOption(
    this.renderObj.monthArr,
    this.renderObj.monthTotal
  );
  this.initChart(myChart, option, dom);
},
getOption(xData, sData) {
      let option = null;
      option = {
        tooltip: {
          trigger: 'axis',
          formatter: (params) => {
            let param = params[0];
            if (this.renderBackFlag) {
              let time = param.name.split('/');
              return (
                time[0] +
                '月' +
                time[1] +
                '日金额:<br/>' +
                param.value.toFixed(2) +
                '元'
              );
            } else {
              return param.name + '金额:<br/>' + param.value.toFixed(2) + '元';
            }
          },
          axisPointer: {
            type: 'shadow',
          },
          backgroundColor: 'rgba(255,255,255,1)',
          extraCssText: 'box-shadow: 2px 2px 4px 0px rgba(0,0,0,0.3);',
          textStyle: {
            fontSize: 14,
            color: '#000',
          },
        },
        xAxis: {
          type: 'category',
          splitLine: { show: false },
          axisTick: { show: false },
          data: xData,
        },
        visualMap: {
          show: false,
          dimension: 0,
          seriesIndex: 0,
          pieces: [
            {
              lte: this.byMonth.realData.length - 1,
              color: '#f90',
            },
            {
              gt: this.byMonth.realData.length - 1,
              lte:
                this.byMonth.realData.length +
                this.byMonth.predictionData.length,
              color: 'red',
            },
          ],
        },
        grid: {
          left: '3%',
          right: '4%',
          bottom: '3%',
          containLabel: true,
        },
        yAxis: {
          type: 'value',
          name: '',
        },
        series: [
          {
            name: '金额',
            type: 'line',
            symbolSize: 10,
            lineStyle: {
              width: 4,
            },
            itemStyle: {
              color: '#f90', //这里设置的拐点颜色
            },
            label: {
              show: true,
              position: 'top',
              formatter: function (params) {
                return params.value.toFixed(0);
              },
            },
            data: sData,
          },
        ],
      };
      return option;
    },
    initChart(myChart, option, dom) {
      myChart.setOption(option);
      myChart.on('click', (params) => {
        let name = params.name;
        this.renderBackFlag = true;
        echarts.dispose(dom);
        var myChart = echarts.init(dom);
        option.xAxis.data = this.renderObj.monthDate[name];
        option.series[0].data = this.renderObj.monthValue[name];
        delete option.visualMap;
        myChart.setOption(option, true);
        this.lunboEcharts(myChart, option.xAxis.data.length);
      });
    },

解决步骤4:回钻功能

renderBack() {
  this.renderBackFlag = false;
  let dom = document.getElementById('lineId1');
  echarts.dispose(dom);
  clearInterval(this.timer);
  let myChart = echarts.init(dom);
  let option = this.getOption(
    this.renderObj.monthArr,
    this.renderObj.monthTotal
  );
  this.initChart(myChart, option, dom);
},

完成!!!多多积累,多多收获!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

conda环境下Torch not compiled with CUDA enabled解决方法

1 问题描述 在运行wav2lip模型训练时&#xff0c;报如下错误&#xff1a; Traceback (most recent call last):File "D:\ml\Wav2Lip\preprocess.py", line 32, in <module>fa [face_detection.FaceAlignment(face_detection.LandmarksType._2D, flip_inputF…

线性代数——(期末突击)矩阵(下)-习题篇(初等变换求逆矩阵、矩阵乘法、求矩阵方程、求线性方程组、解齐次线性方程组)

目录 初等变换求逆矩阵 矩阵乘法 求矩阵方程 求线性方程组 解齐次线性方程组 带有未知数的方程组 初等变换求逆矩阵 如果,则A可逆&#xff0c;且 例题&#xff1a; &#xff0c;求A的逆矩阵。 矩阵乘法 求AB&#xff0c;BA. 矩阵之间的乘法是行乘以列&#xff0c;以这…

基于ssm的教材管理系统论文

基于SSM的教材管理系统的设计与实现 摘 要 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。以前学校对于教材信息的管理和控制&#xff0c;采用人工登记的方式保存相关数据&#xff0c;这种以…

沈阳数字孪生赋能工业智能制造,助力制造业企业数字化转型

沈阳数字孪生赋能工业智能制造&#xff0c;助力制造业企业数字化转型。在数字经济时代&#xff0c;数字孪生作为实现各行各业智能化、数字化的重要手段之一&#xff0c;受到了各方的广泛重视。随着各项关键使能技术的不断发展&#xff0c;数字孪生的应用价值有望得到进一步释放…

MFC 多文档视图架构

目录 多文档视图架构 模仿多文档视图架构 执行流程 多文档视图架构 一个多文档视图架构运行后会是下面的样子&#xff1a; 内部的子框架窗口就相当于一个单文档视图架构&#xff0c;多文档视图架构就相当于在外面套一层框架窗口。 特点&#xff1a;可以管理多个文档(可以有…

【hcie-cloud】【21】容器详解【容器网络说明、容器存储说明、容器镜像说明、dockerfile详述、缩略词】【下】

文章目录 容器介绍&#xff0c;容器工作机制、容器常用命令说明容器网络容器网络简介容器常用网络类型 - Bridge容器常用网络类型 - Host容器常用网络类型 - None其他容器网络类型【Macvlan、Overlay、IPvlan】容器网络相关配置 容器存储容器中应用数据的存储容器持久化存储配置…

猫粮的选择:买主食冻干猫粮要注意什么

由于猫咪是肉食动物&#xff0c;对蛋白质的需求很高&#xff0c;如果摄入的蛋白质不足&#xff0c;就会影响猫咪的成长。而冻干猫粮本身因为制作工艺的原因&#xff0c;能保留原有的营养成分和营养元素&#xff0c;所以冻干猫粮蛋白含量比较高&#xff0c;营养又高&#xff0c;…

控制障碍函数(Control Barrier Function,CBF) 三、代码

三、代码实现 3.1、模型 这是一个QP问题&#xff0c;所以我们直接建模 这其实还是之前的那张图&#xff0c;我们把这个大的框架带入到之前的那个小车追击的问题中去&#xff0c;得到以下的一些具体的约束条件 CLF约束 L g V ( x ) u − δ ≤ − L f V ( x ) − λ V ( x ) …

速学python·输入输出

和用户交互 程序与用户交互工程中 用户把信息传送给程序的过程是 输入 程序把结果展示给用户的过程是 输出 输入输出的最简单的方法是利用控制台 例如 和 都是控制台,进行输入和输出的作用 但是: 我们常见的交互界面,例如QQ,浏览器,Wegame等,都不需要输入命令,大大简化了操…

热度不减!一周61篇,二区以上近一半!| 孟德尔随机化周报(12.27-01.02)

欢迎报名2024年孟德尔随机化方法高级班课程&#xff01; 郑老师团队开设的孟德尔随机化高级班2024年1月20-21日开课&#xff0c;欢迎报名 孟德尔随机化,Mendilian Randomization&#xff0c;简写为MR&#xff0c;是一种在流行病学领域应用广泛的一种实验设计方法&#xff0c;利…

selenium爬取多个网站及通过GUI界面点击爬取

selenium爬取代码 webcrawl.py import re import time import json from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Options from selenium.common.exceptions import TimeoutException, Stale…

Java:手工触发FullGC及堆占用过高常用分析方法

目录 一、手工触发FullGC方式 1、通过代码 2、通过工具 二、堆占用过高常用分析方法 1、查看堆占用情况 2、手工触发FullGC 3、查看对象占用堆的情况 4、分析可疑对象 使用如下命令查看java进程中内存的使用情况 jstat -gcutil <pid> 5000 发现运行中的java进程堆…

07、Kafka ------ 消息生产者(演示 发送消息) 和 消息消费者(演示 监听消息)

目录 Kafka --- 消息生产者★ 消息★ 消息的分发机制★ 分发到哪个分区★ 轮询策略&#xff08;round-robin&#xff09;★ 使用命令行工具发送消息演示添加消息 Kafka --- 消息消费者★ 消息消费者命令▲ 监听 【指定主题】 的所有消息:▲ 监听 【指定主题、指定分区】的所有消…

AI与低代码解锁无限可能

前言 近年来&#xff0c;人工智能&#xff08;AI&#xff09;和低代码开发技术逐渐成为数字化转型的重要推动力。AI作为一项具有革命性潜力的技术&#xff0c;正在改变我们生活的方方面面。而低代码开发则提供了一种快速构建应用程序的方法&#xff0c;使得开发者无需深入编写…

【刷题日记】青少年CTF-A2 Crypto(全)

Caesar 题目难度&#xff1a;★ 题目描述&#xff1a;凯撒大帝在很早的时候发明了这个&#xff0c;你能解密出来吗&#xff1f;flag格式为&#xff1a;qsnctf{xxx}。 下载附件&#xff0c;题目提示告诉我们是凯撒了&#xff0c;一个简单的移位操作。 使用在线解码网站&#…

C语言基础语法跟练

题源&#xff1a;牛客网 1、输出"Hello Nowcoder!"。开始你的编程之旅吧。 #include <stdio.h>int main() {printf("Hello Nowcoder!");return 0; } 2、KiKi学会了printf在屏幕输出信息&#xff0c;他想输出一架小飞机。请帮他编写程序输出这架小…

react native中使用tailwind并配置自动补全

使用的第三方库是tailwind-react-native-classnames&#xff0c;同类的也有tailwind-rn&#xff0c;但是我更喜欢前者官方demo&#xff1a; import { View, Text } from react-native; import tw from twrnc;const MyComponent () > (<View style{twp-4 android:pt-2 b…

智能化配网故障定位技术:未来发展趋势与应用前景

在当今这个科技高速发展的时代&#xff0c;智能化技术已经渗透到了我们生活的方方面面。作为电力行业的重要组成部分&#xff0c;配电网的自动化和智能化水平也在不断提高。本文将重点介绍一种基于成熟的行波测距技术的智能化配网故障定位技术——配网行波型故障预警与定位系统…

iPhone语音备忘录怎么导出?这3种方法任你选择!

作为iPhone用户&#xff0c;我们应该会经常使用语音备忘录来记录一些重要的信息。有时候&#xff0c;我们可能需要将这些语音备忘录导出&#xff0c;以方便分享或备份。iphone语音备忘录怎么导出&#xff1f;今天&#xff0c;小编将为大家介绍3种导出iPhone语音备忘录的方法&am…

PyTorch: torch.nn 子模块及其在循环神经网络中的应用

目录 torch.nn子模块详解 nn.utils.rnn.PackedSequence 参数说明 注意事项 示例代码 nn.utils.rnn.pack_padded_sequence 参数说明 返回值 注意事项 示例代码 nn.utils.rnn.pad_packed_sequence 参数说明 返回值 注意事项 示例代码 nn.utils.rnn.pad_sequence …