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

news2024/12/27 13:55:05

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>

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

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

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

相关文章

Spark-机器学习(5)分类学习之朴素贝叶斯算法

在之前的文章中&#xff0c;我们学习了回归中的逻辑回归&#xff0c;并带来简单案例&#xff0c;学习用法&#xff0c;并带来了简单案例。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵…

k8s-身份认证与权限

认证概述 Kubernetes作为一个分布式集群的管理工具&#xff0c;保证集群的安全性是其一个重要的任务。所谓的安全性其实就是保证对Kubernetes的各种客户端进行认证和鉴权操作。 在Kubernetes集群中&#xff0c;客户端通常有两类&#xff1a; User Account&#xff1a;一般是独…

原型链prototype、__proto、constructor的那些问题整理

再了解原型链之前,我们先来看看构造函数和实例对象的打印结构 - 函数 这里我们定义一个构造函数Fn,然后打印它的结构吧 function Fn(){} console.dir(Fn)控制台得到结构 从上面结构我们能看的出来,函数有两种原型,一种是作为函数特有的原型:prototype,另一种是作为对象的__…

记录wordpress网站搭建及当天被SEO优化收录

网站是前不就前搭建的&#xff0c;但是一直没有做SEO优化&#xff0c;今天花了点时间做下优化。记录下&#xff0c;喜欢的朋友点赞收藏下。 1.wordpress后台下载插件Yoast SEO插件&#xff0c;setting中搜索XML sitemaps&#xff0c;点view the XML sitemap&#xff0c;暂时不…

传媒论坛编辑部传媒论坛杂志社传媒论坛杂志2024年第7期目录

专题│场景传播研究 场景传播&#xff1a;一场遮盖自我与寻找自我的博弈 胡沈明; 3 基于CiteSpace的中国场景传播研究热点分析 管倩;粟银慧; 4-610《传媒论坛》投稿&#xff1a;cnqikantg126.com 数字世界的美与危&#xff1a;场景传播的失范与应对之举 王依晗;章洁…

srpingMVC基本使用

文章目录 1. springMVC基本功能(1) maven坐标导入(2) 编写表现层(3) springMVC配置类编写(4) 部署tomcat访问 2. 各种请求方法get请求post请求put请求delete请求请求参数提取 3. 请求参数接收(1) param参数接受封装到对象中 (2) 路劲参数接收集合接受时间类型接收json参数接收m…

鸿蒙OpenHarmony【轻量系统 编写“Hello World”程序】 (基于Hi3861开发板)

编写“Hello World”程序 下方将通过修改源码的方式展示如何编写简单程序&#xff0c;输出“Hello world”。请在下载的源码目录中进行下述操作。 确定目录结构。 开发者编写业务时&#xff0c;务必先在./applications/sample/wifi-iot/app路径下新建一个目录&#xff08;或一…

Electron中使用Prisma(以SQLite为例)

1、安装 Prisma 打开终端&#xff0c;执行以下命令安装 Prisma CLI&#xff1a; npm install prisma -g 2、初始化 Prisma 项目 在工作目录中执行以下命令来初始化一个新的 Prisma 项目&#xff1a; prisma init 这将创建一个新的文件夹&#xff0c;包含了必要的文件和目…

proteus+stm32+CubeMX+dht11+lcd1602

浅浅记录下过程遇到的问题&#x1f921;&#x1f921;&#x1f921; 1 供电网配置错误&#xff08;加上就好了 新起个名也会出这个 / 电源不起名 不创建估计项目也会&#xff09;没zet6的 proteus 里 固件库 账号注册半天没成 就用的stm32F103R6的然后发现单片机不输出高低电平…

ElasticSearch 安装(docker)

下载安装包 阿里云链接&#xff1a; elasticSearch.exe https://www.alipan.com/s/3A356NnmWaJ 提取码: 93da 点击链接保存&#xff0c;或者复制本段内容&#xff0c;打开「阿里云盘」APP &#xff0c;无需下载极速在线查看&#xff0c;视频原画倍速播放。 安装步骤 1、首先…

RabbitMQ发布确认和消息回退(6)

概念 发布确认原理 生产者将信道设置成 confirm 模式&#xff0c;一旦信道进入 confirm 模式&#xff0c;所有在该信道上面发布的消息都将会被指派一个唯一的 ID(从 1 开始)&#xff0c;一旦消息被投递到所有匹配的队列之后&#xff0c;broker就会发送一个确认给生产者(包含消…

2024精武杯复现

第一部分&#xff1a;计算机和手机取证 1. 请综合分析计算机和手机检材&#xff0c;计算机最近一次登录的账户名是 用火眼分析后在登录信息查找最后登录的人&#xff0c;用户名是admin 2. 请综合分析计算机和手机检材&#xff0c;计算机最近一次插入的USB存储设备串号是 在u…

AIX7环境上一次艰难的Oracle打补丁经历

系统环境 AIX &#xff1a;7200-05-03-2148 Oracle&#xff1a;11.2.0.4 PSU: 11.2.0.4.201020&#xff08;31718723&#xff09; perl:5.28 问题一&#xff1a;AUTO patch #/u01/app/11.2.0/grid/OPatch/opatch auto /tmp/31718723 错误信息如下&#xff1a;匹配mos 2516761.1…

Spring MVC系列之九大核心组件

概述 Spring MVC是面试必问知识点其一&#xff0c;Spring MVC知识体系庞杂&#xff0c;有以下九大核心组件&#xff1a; HandlerMappingHandlerAdapterHandlerExceptionResolverViewResolverRequestToViewNameTranslatorLocaleResolverThemeResolverMultipartResolverFlashMa…

LeetCode 面试题 08.02——迷路的机器人

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 此题就是一个典型的图搜索题&#xff0c;一种就是广度优先搜索&#xff0c;一种就是深度优先搜索。 3. 代码实现 class Solution { public:vector<vector<int>> pathWithObstacles(vector<vecto…

Go源码--Strconv库

简介 Strconv 库是一些跨类型的转换函数集合&#xff0c;大家应该很熟悉。源码没有什么难点&#xff0c;主要是面试题有可能会出这种类型的&#xff0c;所以简单介绍下&#xff0c;主要介绍 以下两种常用转换&#xff0c;其他的没细研究&#xff0c;感兴趣的可以看看。 Strco…

[笔试训练](八)

目录 022&#xff1a;求最小公倍数 023&#xff1a;数组中的最长连续子序列 024&#xff1a;字母收集 022&#xff1a;求最小公倍数 求最小公倍数_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 求最小公倍数公式&#xff1a;lcm(a,b)a*b/gcd(a,b)&am…

网页提示语闪太快的定位问题(selenium)

selenium UI自动化时&#xff0c;提示语闪太快&#xff0c;导致无法获取元素的问题 解决办法 步骤一&#xff1a; F12---》控制台输入debugger 步骤二&#xff1a;对于需要定位的部分&#xff0c;在控制台的debugger处回车&#xff0c;可以定住页面 步骤三&#xff1a;正常定…

win11 安装qt5.14.2 、qtcreator、vs编译器 。用最小安装进行 c++开发qt界面

系统 &#xff1a;win11 一、安装vs生成工具 &#xff0c;安装编译器 下载visualstudio tools 生成工具&#xff1a; 安装编译器 和 windows sdk&#xff1a; 安装debug 调试器&#xff1a; 二、Qt5.14.2下载 下载链接: Index of /archive/qt/5.14/5.14.2 安装qt 三、配置QT/…

MVP+敏捷开发

MVP敏捷开发 1. 什么是敏捷开发&#xff1f; 敏捷开发是一种软件开发方法论&#xff0c;旨在通过迭代、自组织的团队和持续反馈&#xff0c;快速响应需求变化并交付高质量的软件。相较于传统的瀑布模型&#xff0c;敏捷开发强调灵活性、适应性和与客户的紧密合作。敏捷开发方…