vue echarts折线图 折线堆积图和折线面积图

vue echarts折线图 折线堆积图和折线面积图

1、折线堆积图和折线面积图的结合;

上代码

<template>
  <section>
    <div
      id="performaceLineChart"
      ref="performaceLineChartRef"
      style="width: 100%; height: 500px"
    ></div>
  </section>
</template>

<script>
import * as echarts from "echarts";
export default {
  name: "", 
  components: {},
  props: {
},
  data() {
    return {
      chart: null,
      _thisForChart: null,
      _thisForWindow: null,
    };
  },
  watch: {},
  mounted() {
    this.$nextTick(() => {
      this.initLineChart();
      this.addEventListenerToSidebarContainer(this)
      this.addEventListenerToWindowResize(this)
    });
  },
  beforeDestroy() {
    if (!this.chart) {
      return;
    }

    this.removeEventListenerToSidebarContainer()
    this.removeEventListenerToWindowResize()

    this.chart.dispose();
    this.chart = null;
  },
  methods: {
    initLineChart() {
      var chartDom = document.getElementById("performaceLineChart");
      this.chart = echarts.init(chartDom);
      this.setOptions();
    },

    setOptions(option) {
      this.chart.setOption({
        color: ["#ee6666", "#5470c6", "#aeaeae", "#f9c858",],
        toolbox: {
          top: "0",
          right: "10",
          itemSize: 18,
          iconStyle: {
            borderColor: "#aeaeae",
            borderWidth: 2,
          },
          feature: {
            saveAsImage: {
              title: "导出图片",
              name: '导出图片名称'
            },
          },
        },
        tooltip: {
          trigger: "axis",
          backgroundColor: 'rgba( 0, 0, 0,0.7)',
          borderColor: 'rgba( 0, 0, 0,0.7)',
          formatter: function (params) {
            var str = params[0].name + "</br>";
            for (let item of params) {
              str =`<span style='color: #fff;'>${str}</span><div style='display:flex;align-items:center;justify-content:space-between;'><span>${item.marker}<span style='color: #fff;'>${item.seriesName}</span></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style='color: #fff;'>${item.value}%</span></div>`;
            }
            return str;
          },
        },
        legend: {
          x: "center",
          y: "bottom",
          icon: "circle",
          textStyle: {},
          data: ['上海','广州','北京']
        },
        grid: {
          left: "0.5%",
          right: "1%",
          bottom: "15%",
          containLabel: true,
        },
        xAxis: {
          type: "category",
          boundaryGap: false,
          axisLabel: {},
          axisLine: {
            show: true,
            lineStyle: {},
            onZero: false, // X轴线始终位于底部
          },
          splitLine: {
            show: false,
          },
          data: ['2024-01-01','2024-01-02','2024-01-03','2024-01-04','2024-01-05','2024-01-06']
        },
        yAxis:[
          {
            type: "value",
            scale: true,
            // interval:  5,
            splitNumber: 5,

            // min: 'dataMin',
            // max: 'dataMax',

            // min: function(value) {
            //   return value.min
            // },
            // max: function(value) {
            //   return value.max
            // },

            alignTicks: true,

            // max: function (val) {
            //   if (Math.abs(val.max)>Math.abs(val.min)) {
            //     return (Math.abs(val.max)*1.2).toFixed(0);} 
            //   else {
            //     return (Math.abs(val.min)*1.2).toFixed(1);}},
            // min: function (val) {
            //   if(Math.abs(val.max)>Math.abs(val.min)){
            //     return-(Math.abs(val.max)*1.2).toFixed(0);} 
            //   else {
            //     return -(Math.abs(val.min)*1.2).toFixed(1);}},

            axisLabel: {
              show: true,
              formatter: (value) => {
                return `${value.toFixed(1)}%`
              }
            },
            axisLine: {
              show: false,
            },
            splitLine: {
              show: true,
              lineStyle: {
                type: "dotted",
              },
            },
          },
          {
            type: "value",
            // interval:  5,
            splitNumber: 5,

            // min: 'dataMin',
            // max: 'dataMax',

            // min: function(value) {
            //   return value.min
            // },
            // max: function(value) {
            //   return value.max
            // },

            // alignTicks: true,

            // max: function (val) {
            //   if (Math.abs(val.max)>Math.abs(val.min)) {
            //     return (Math.abs(val.max)*1.2).toFixed(0);} 
            //   else {
            //     return (Math.abs(val.min)*1.2).toFixed(1);}},
            // min: function (val) {
            //   if(Math.abs(val.max)>Math.abs(val.min)){
            //     return-(Math.abs(val.max)*1.2).toFixed(0);} 
            //   else {
            //     return -(Math.abs(val.min)*1.2).toFixed(1);}},

            axisLabel: {
              show: true,
              formatter: (value) => {
                return `${value}%`
              }
            },

            axisLine: {
              show: false,
            },
            splitLine: {
              show: true,
              lineStyle: {
                type: "dotted",
              },
            },
          },
          {
            type: "value",
            // interval:  5,
            splitNumber: 5,

            // min: 'dataMin',
            // max: 'dataMax',

            // min: function(value) {
            //   return value.min
            // },
            // max: function(value) {
            //   return value.max
            // },

            alignTicks: true,

            // max: function (val) {
            //   if (Math.abs(val.max)>Math.abs(val.min)) {
            //     return (Math.abs(val.max)*1.2).toFixed(0);} 
            //   else {
            //     return (Math.abs(val.min)*1.2).toFixed(1);}},
            // min: function (val) {
            //   if(Math.abs(val.max)>Math.abs(val.min)){
            //     return-(Math.abs(val.max)*1.2).toFixed(0);} 
            //   else {
            //     return -(Math.abs(val.min)*1.2).toFixed(1);}},

            axisLabel: {
              show: true,
              formatter: (value) => {
                return `${value.toFixed(1)}%`
              }
            },
            axisLine: {
              show: false,
            },
            splitLine: {
              show: true,
              lineStyle: {
                type: "dotted",
              },
            },
          },
          {
            type: "value",
            // interval:  5,
            splitNumber: 5,

            // min: 'dataMin',
            // max: 'dataMax',

            // min: function(value) {
            //   return value.min
            // },
            // max: function(value) {
            //   return value.max
            // },

            // alignTicks: true,

            // max: function (val) {
            //   if (Math.abs(val.max)>Math.abs(val.min)) {
            //     return (Math.abs(val.max)*1.2).toFixed(0);} 
            //   else {
            //     return (Math.abs(val.min)*1.2).toFixed(1);}},
            // min: function (val) {
            //   if(Math.abs(val.max)>Math.abs(val.min)){
            //     return-(Math.abs(val.max)*1.2).toFixed(0);} 
            //   else {
            //     return -(Math.abs(val.min)*1.2).toFixed(1);}},

            axisLabel: {
              show: true,
              formatter: (value) => {
                return `${value}%`
              }
            },
            
            axisLine: {
              show: false,
            },
            splitLine: {
              show: true,
              lineStyle: {
                type: "dotted",
              },
            },
          },
        ],
        series: [
          {
            name: '上海',
            type: "line",
            // stack: "total",
            yAxisIndex: null,
            // smooth: true,
            showSymbol: false,
            lineStyle: { width: 2 },
            itemStyle: {
              normal: {
                label: {
                  show: false,
                },
              },
            },       
            areaStyle: null,
            data: ["-4.11", "11.12", "-5.13", "17.13", "2.13", "-19.13",],
          },
          {
            name: '广州',
            type: "line",
            // stack: "total",
            yAxisIndex: null,
            // smooth: true,
            showSymbol: false,
            lineStyle: { width: 2 },
            itemStyle: {
              normal: {
                label: {
                  show: false,
                },
              },
            },       
            areaStyle: null,
            data: ["13.51", "-6.12", "10.13", "4.13", "-10.13", "10.99",],
          },
          {
            name: '北京',
            type: "line",
            // stack: "total",
            yAxisIndex: 2,
            // smooth: true,
            showSymbol: false,
            lineStyle: { width: 0 },
            itemStyle: {
              normal: {
                label: {
                  show: false,
                },
              },
            },       
            areaStyle: {
              color: new echarts.graphic.LinearGradient(
                0,
                0,
                0,
                1,
                [
                  {
                    offset: 0,
                    color: "rgb(174,174,174)",
                  },
                  {
                    offset: 1,
                    color: "rgb(174,174,174)",
                  },
                ],
              ),
            },
            data: ["4.11", "1.12", "-5.13", "-7.13", "-5.93", "-6.13",],
          }
        ]
      });
    },

    // 监听侧边栏导航的宽度发生变化
    addEventListenerToSidebarContainer(_this) {
      let sidebarContainer = document.getElementsByClassName("sidebar-container")[0];
      this._thisForChart = _this;
      sidebarContainer &&
        sidebarContainer.addEventListener("transitionend", this.sidebarResizeHandler);
    },
    removeEventListenerToSidebarContainer() {
      let sidebarContainer = document.getElementsByClassName("sidebar-container")[0];
      this._thisForChart = null
      sidebarContainer &&
        sidebarContainer.removeEventListener("transitionend", this.sidebarResizeHandler);
    },

    sidebarResizeHandler(e) {
      if (e.propertyName === "width") {
        this._thisForChart.chart.resize();
      }
    },

    // window 的尺寸发生变化的时候 会执行图表的resize
    addEventListenerToWindowResize(_this) {
      this._thisForWindow = _this;
      window.addEventListener("resize", this.windowResizeHandler);
    },
    removeEventListenerToWindowResize(_this) {
     this. _thisForWindow = null
      window.removeEventListener("resize", this.windowResizeHandler);
    },

    windowResizeHandler(e) {
      this._thisForWindow.chart.resize();
    },

  },
};
</script>

<style lang="scss" scoped>
 </style>

展示效果图
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CasinoRoyale靶机练习实践报告

CasinoRoyale靶机练习实践报告 下载地址: https://drive.google.com/open?id1FYP246L63zShV00wOckAQ5F5XJ4HkZ0Lhttps://download.vulnhub.com/casinoroyale/CasinoRoyale.ovahttps://download.vulnhub.com/casinoroyale/CasinoRoyale.ova.torrent ( Magnet) 1 安装靶机 …

分布式WEB应用中会话管理的变迁之路

Session一词直译为“会话”&#xff0c;意指有始有终的一系列动作&#xff0f;消息。Session是Web应用蓬勃发展的产物之一&#xff0c;在Web应用中隐含有“面向连接”和“状态保持”两个含义&#xff0c;同时也指代了Web服务器与客户端之间进行状态保持的解决方案。 在Web应用…

018基于SSM的音乐系统网站

018基于SSM的音乐系统/网站 开发环境&#xff1a; Jdk7(8)Tomcat7(8)MysqlIntelliJ IDEA(Eclipse)Maven 数据库&#xff1a; MySQL 技术&#xff1a; SpringSpring mvcMybatisJqueryVideo jsJSPJSTLEasyUI 适用于&#xff1a; 课程设计&#xff0c;毕业设计&#xff0c;学习…

tiktok如何影响用户行为的分析兼论快速数据分析的策略

tiktok如何影响用户行为的分析 快速数据分析的策略流程&#xff1a; 1.确定指标变量&#xff0c;也就确定了数据分析想要回答的问题。想回答不同的问题&#xff0c;就选择不同的指标变量。 变量筛选方法选出指标变量相关的变量&#xff1b; 针对筛选出的变量进行描述性分析和因…

职场口才使人取得事业上的成功?

职场口才使人取得事业上的成功&#xff1f; 一、引言 在职场中&#xff0c;一个人的口才能力往往成为其事业成功的关键因素。优秀的职场口才不仅能够帮助我们更好地与他人沟通交流&#xff0c;还能够展现个人的专业素养和魅力&#xff0c;为事业的顺利发展奠定坚实基础。本文将…

【软件】ERETCAD-Env:在轨空间环境3D动态仿真软件

文章介绍了Extreme-environment Radiation Effect Technology Computer-Aided Design – Environment (ERETCAD-Env)软件&#xff0c;文章的介绍和展示了ERETCAD-Env软件的功能和特点&#xff0c;这是一款用于动态模拟在轨卫星所处空间环境的计算机辅助设计软件。强调了该软件在…

城市建筑轮廓矢量边界、建设用地数据、城市道路网分布、城市土地利用规划分布、土地利用数据、城市绿地分布

数据下载链接&#xff1a;数据下载链接 中国主要城市建筑底面轮廓和建筑高度空间分布数据&#xff0c;包括省会城市、地级市及县级市等主要城市。城市建筑底面轮廓和建筑高度数据&#xff0c;数据坐标为 WGS84地理坐标&#xff0c; 数据格式为 SHP 文件。数据范围基本覆盖城市…

vscode中用node的终端安装模块

1 安装模块 在控制台输入 npm install crypto-js 创建好了会多几个文件 crypto-js是我们刚刚装的包&#xff0c;用于hash算法和aes des算法 2 package.json文件的作用 当我们把node-modules删了&#xff0c;或者是新建一个文件后我们不用把这个node-modules拷贝过去 在控制台…

路由器使用docker安装mysql和redis服务

路由器使用docker安装mysql和redis服务 1.先在路由器中开启docker功能 &#xff08;需要u盘 或者 移动硬盘&#xff09; 2. docker 管理地址 :http://192.168.0.1:11180/#/ 3. 拉取镜像 4. mysql容器参数设置 MYSQL_ROOT_PASSWORD 5. redis 容器设置 开发经常需要用到 &…

网络安全培训对软件开发人员的重要性

微信搜索关注&#xff1a;网络研究观 阅读获取更多信息。 组织所经历的持续不断的网络威胁没有任何放缓的迹象&#xff0c;使得实现有效安全的任务变得越来越具有挑战性。 根据最新的 Verizon 数据泄露调查报告&#xff0c;2023 年高级攻击增加了 200% 以上。 IBM 数据泄露成…

安居水站:自来水:日常中的安全与奥秘

在我们的日常生活中&#xff0c;自来水如同空气一样&#xff0c;是生活中不可或缺的一部分。每当我们拧开水龙头&#xff0c;清澈的水流便汩汩而出&#xff0c;滋养着我们的生活和健康。然而&#xff0c;这看似普通的自来水背后&#xff0c;却隐藏着许多我们可能并不了解的知识…

Spark AQE 导致的 Driver OOM问题

背景 最近在做Spark 3.1 升级 Spark 3.5的过程中&#xff0c;遇到了一批SQL在运行的过程中 Driver OOM的情况&#xff0c;排查到是AQE开启导致的问题&#xff0c;再次分析记录一下&#xff0c;顺便了解一下Spark中指标的事件处理情况 结论 SQLAppStatusListener 类在内存中存…

mac 教程 终端如何拆墙

一直觉得自己写的不是技术&#xff0c;而是情怀&#xff0c;一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的&#xff0c;希望我的这条路能让你们少走弯路&#xff0c;希望我能帮你们抹去知识的蒙尘&#xff0c;希望我能帮你们理清知识的脉络&#xff0…

面试:finalize

一、概述 将资源释放和清理放在finalize方法中非常不好&#xff0c;非常影响性能&#xff0c;严重时甚至会引起OOM&#xff08;Out Of Memory&#xff09;&#xff0c;从Java9开始就被标注为Deprecated&#xff0c;不建议被使用了。 二、两个重要的队列 1、unfinalized 队列 当…

SpringBoot中多数据源灵活切换解决方案

本篇内容介绍了“SpringBoot中如何使用Dynamic Datasource配置多数据源”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 源码地址/文档说明 功能特性: 支持 数据源分组…

vue与Spring boot数据交互例子【简单版】

文章目录 什么是Vue&#xff1f;快速体验Vueaxios是什么&#xff1f;向Springboot后端发送数据接收Springboot后端数据小结 什么是Vue&#xff1f; 官网解释&#xff1a;Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上…

JAVA12

JAVA12 1 概述2 语法层次的变化1_swich表达式(预览) 3 API层次的变化1_支持数字压缩格式化2_String新方法3_Files新增mismatch方法 4 关于GC方面的新特性1_Shenandoah GC&#xff1a;低停顿时间的GC&#xff08;预览&#xff09;2_可中断的 G1 Mixed GC3_ 增强G1 5 其他新特性简…

ENVI下基于劈窗算法从MODIS数据中反演海表温度

劈窗算法最初是为反演海面温度开发的&#xff0c;具体地说是针对NOAA/AVHRR的4和5通道设计的&#xff0c;后来也被用来反演地表温度&#xff0c;这种算法较成熟&#xff0c;精度也高。劈窗算法以地表热辐射传导方程为基础&#xff0c;利用10~13μm 大气窗口内&#xff0c;两个相…

全志ARM-修改开发板内核启动日志

修改开发板内核日志输出级别&#xff1a; 默认输出级别为1&#xff0c;需要用超级用户权限修改 sudo vi /boot/orangepiEvn.txt 把第一行内核启动输出权限改为7&#xff0c;第二行把输出方式该为“serial”串口输出

Typora for Mac:轻量级Markdown编辑器

Typora for Mac是一款专为Mac用户设计的轻量级Markdown编辑器&#xff0c;它以其简洁的界面和强大的功能&#xff0c;成为了Markdown写作爱好者的首选工具。 Typora for Mac v1.8.10中文激活版下载 Typora的最大特色在于其所见即所得的编辑模式&#xff0c;用户无需关心复杂的M…