多条折线图修改图例以及自定义tooltip

news2024/9/20 20:34:28

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 在图例后面添加所有数据之和
  • 修改之后 series 中的name之后导致tooltip也加上了
  • 重新自定义tooltip,去掉总量统计

核心代码

  1. 监听数据改变计算总量
  2. 修改name字段
  3. 自定义 tooltip
 // 计算每条线的总和
const sum1 = this.VALUE1.reduce((acc, val) => acc + val, 0);
const sum2 = this.VALUE2.reduce((acc, val) => acc + val, 0);
const sum3 = this.VALUE3.reduce((acc, val) => acc + val, 0);

series: [
    {
      name: `火灾总量(${sum1})`,
      data: this.VALUE1,
    },
    {
      name: `轻微火灾(${sum2})`,
      data: this.VALUE2,
    },
    {
      name: `非轻微火灾(${sum3})`,
      data: this.VALUE3,
    },
  ],
  
  
 
 tooltip: {
      show: "true",
      trigger: "axis",
      textStyle: {
        fontSize: this.fontSize(0.15),
      },
      // ☆☆☆☆☆☆自定义tooltip,去掉图例后面添加的总数值统计
      formatter: function (params) {
        console.log("params", params);
        let content = "";
        params.forEach((param) => {
          const value = param.value;
          const seriesName = param.seriesName;
          const marker = param.marker;

          content += `<div>${marker}${
            seriesName.split("(")[0]
          }${value}</div>`;
        });
        // 构建tooltip的内容
        return content;
      },
 },

整个折线图组件

<template>
  <div class="w100 h100" ref="chart"></div>
</template>

<script>
import resize from "./mixins/resize";
let color = ["rgba(28, 214, 170,1)", "#FFF200", "#FF6200"];
let color1 = [
  "rgba(28, 214, 170,.1)",
  "rgba(255, 255, 0,.1)",
  "rgba(255, 98, 0,.1)",
];
export default {
  mixins: [resize],
  props: ["list", "type"],
  watch: {
    list: {
      // 深度监听没有旧值
      handler(val) {
        console.log(val, "tab3双折现");
        this.initChart();
        this.xAxisData =
          this.type == 1 ? val.monthOrDayOrTimeList : val.monthOrDayOrTimeList;
        this.VALUE1 =
          this.type == 1 ? val.policeTotalCountList : val.policeTotalCountList;
        this.VALUE2 = this.type == 1 ? val.minorFireList : val.minorFireList;
        this.VALUE3 =
          this.type == 1 ? val.notMinorFireList : val.notMinorFireList;
        // this.xAxisData = val.map((item) => item.date);
        // this.VALUE1 = val.map((item) => 50 - item.sugarAfterMeal);
        // this.VALUE2 = val.map((item) => item.sugarBeforeMeal);
        // this.VALUE3 = val.map((item) => item.sugarAfterMeal);
        // 计算每条线的总和
        const sum1 = this.VALUE1.reduce((acc, val) => acc + val, 0);
        const sum2 = this.VALUE2.reduce((acc, val) => acc + val, 0);
        const sum3 = this.VALUE3.reduce((acc, val) => acc + val, 0);
        let option = {
          xAxis: [
            {
              data: this.xAxisData,
            },
          ],

          series: [
            {
              name: `火灾总量(${sum1})`,
              data: this.VALUE1,
            },
            {
              name: `轻微火灾(${sum2})`,
              data: this.VALUE2,
            },
            {
              name: `非轻微火灾(${sum3})`,
              data: this.VALUE3,
            },
          ],
        };
        this.chart.setOption(option);

        if (this.timeId) {
          clearInterval(this.timeId);
          this.timeId = null;
        }
        if (this.xAxisData.length > this.maxNum) {
          let num = 0;
          this.timeId = setInterval(() => {
            if (num + this.maxNum == this.xAxisData.length) {
              num = 0;
            } else {
              num += 1;
            }

            let option = {
              dataZoom: [
                {
                  startValue: num, // 从头开始。
                  endValue: num + this.maxNum - 1, // 一次性展示几个
                },
              ],
            };
            this.chart.setOption(option);
          }, 3000);
        }
      },
      // 这里是关键,代表递归监听的变化
      deep: true,
    },
  },

  data() {
    return {
      chart: null,
      xAxisData: [],
      VALUE3: [],
      maxNum: 12, // 一次性展示几个。
      timeId: null,
    };
  },
  mounted() {
    this.$nextTick(() => {
      this.initChart();
    });
  },
  beforeDestroy() {
    if (!this.chart) {
      return;
    }
    this.chart = null;
    clearInterval(this.timeId);
    this.timeId = null;
  },
  methods: {
    init() {},
    // 体温
    initChart() {
      this.chart = this.$echarts.init(this.$refs.chart);
      this.chart.setOption({
        // color: color,
        tooltip: {
          show: "true",
          trigger: "axis",
          textStyle: {
            fontSize: this.fontSize(0.15),
          },
          // ☆☆☆☆☆☆自定义tooltip,去掉图例后面添加的总数值统计
          formatter: function (params) {
            console.log("params", params);
            let content = "";
            params.forEach((param) => {
              const value = param.value;
              const seriesName = param.seriesName;
              const marker = param.marker;

              content += `<div>${marker}${
                seriesName.split("(")[0]
              }${value}</div>`;
            });
            // 构建tooltip的内容
            return content;
          },
        },
        grid: {
          top: "20%",
          left: "6%",
          right: "1%",
          bottom: "4%",
          containLabel: true,
        },
        legend: {
          itemHeight: this.fontSize(0.13), //图例图标的高度
          itemWidth: this.fontSize(0.2), //图例图标的宽度
          itemGap: this.fontSize(0.23), //图例图标与文字间的间距
          textStyle: {
            color: "#fff",
            borderColor: "#fff",
            fontSize: this.fontSize(0.14),
          },
          top: 7,
          right: 20,
        },
        // 横坐标设置
        xAxis: [
          {
            type: "category",
            boundaryGap: true,
            //坐标轴
            axisLine: {
              lineStyle: {
                color: "#2384B1", //横轴颜色
                width: this.fontSize(0.01), //横轴粗细
              },
            },
            axisLabel: {
              interval: 0, // 显示所有标签
              rotate: 30, // 倾斜标签以节省空间
              textStyle: {
                color: "#fff", // 横坐标颜色
                fontSize: this.fontSize(0.13),
              },
            },
            axisTick: {
              show: true, //不显示坐标轴刻度
              alignWithLabel: true, // 刻度线与标签对齐
            },
            // data: this.xAxisData,
          },
        ],
        // Y轴设置
        yAxis: [
          {
            type: "value",
            min: 0,
            // max:  150,
            minInterval: 0.5,
            // 网格线
            splitLine: {
              show: true,
              lineStyle: {
                color: "#023052",
                type: "dashed",
              },
            },
            axisLine: {
              show: false,
            },
            //坐标值标注
            axisLabel: {
              // formatter: "{value}", //右侧Y轴文字显示
              textStyle: {
                color: "#fff",
                fontSize: this.fontSize(0.13),
              },
            },
          },
        ],
        //滑动条
        dataZoom: [
          {
            xAxisIndex: 0, //这里是从X轴的0刻度开始
            show: false, //是否显示滑动条,不影响使用
            type: "inside", // 这个 dataZoom 组件是 slider 型 dataZoom 组件
            startValue: 0, // 从头开始。
            endValue: this.maxNum - 1, // 一次性展示几个
          },
          {
            xAxisIndex: 0, //这里是从X轴的0刻度开始
            show: false, //是否显示滑动条,不影响使用
            type: "inside", // 这个 dataZoom 组件是 slider 型 dataZoom 组件
            startValue: 0, // 从头开始。
            endValue: this.maxNum - 1, // 一次性展示几个
          },
        ],
        series: [
          {
            name: " ",
            type: "line",
            smooth: true, //是否平滑曲线显示
            symbol: "none", // circle | rect | roundRect | triangle | diamond | pin | arrow
            lineStyle: {
              normal: {
                width: this.fontSize(0.01),
                color: color[0], // 线条颜色
              },
            },
            itemStyle: {
              normal: {
                color: color[0],
              },
            },
            areaStyle: {
              //区域填充样式
              normal: {
                //线性渐变,前4个参数分别是x0,y0,x2,y2(范围0~1);相当于图形包围盒中的百分比。如果最后一个参数是‘true’,则该四个值是绝对像素位置。
                color: new this.$echarts.graphic.LinearGradient(
                  0,
                  0,
                  0,
                  1,
                  [
                    {
                      offset: 0,
                      color: color[0],
                    },
                    {
                      offset: 1,
                      color: color1[0],
                    },
                  ],
                  false
                ),
                // shadowColor: color[0], //阴影颜色
                shadowBlur: 20, //shadowBlur设图形阴影的模糊大小。配合shadowColor,shadowOffsetX/Y, 设置图形的阴影效果。
              },
            },
            label: {
              normal: {
                show: false,
                position: "top", //在上方显示
                textStyle: {
                  //数值样式
                  color: color[0],
                  Size: this.fontSize(0.15),
                  fontWeight: 700,
                },
              },
            },
            // data: this.goodRate, //折线图数据
          },
          {
            name: " ",
            type: "line",
            smooth: true, //是否平滑曲线显示
            symbol: "none", // circle | rect | roundRect | triangle | diamond | pin | arrow
            lineStyle: {
              normal: {
                width: this.fontSize(0.01),
                color: color[1], // 线条颜色
              },
            },
            itemStyle: {
              normal: {
                color: color[1],
              },
            },
            areaStyle: {
              //区域填充样式
              normal: {
                //线性渐变,前4个参数分别是x0,y0,x2,y2(范围0~1);相当于图形包围盒中的百分比。如果最后一个参数是‘true’,则该四个值是绝对像素位置。
                color: new this.$echarts.graphic.LinearGradient(
                  0,
                  0,
                  0,
                  1,
                  [
                    {
                      offset: 0,
                      color: color[1],
                    },
                    {
                      offset: 1,
                      color: color1[1],
                    },
                  ],
                  false
                ),
                // shadowColor: color[1], //阴影颜色
                shadowBlur: 20, //shadowBlur设图形阴影的模糊大小。配合shadowColor,shadowOffsetX/Y, 设置图形的阴影效果。
              },
            },
            label: {
              normal: {
                show: false,
                position: "top", //在上方显示
                textStyle: {
                  //数值样式
                  color: color[1],
                  Size: this.fontSize(0.13),
                  fontWeight: 700,
                },
              },
            },
            // data: this.goodRate, //折线图数据
          },
          {
            name: " ",
            type: "line",
            smooth: true, //是否平滑曲线显示
            symbol: "none", // circle | rect | roundRect | triangle | diamond | pin | arrow
            lineStyle: {
              normal: {
                width: this.fontSize(0.01),
                color: color[2], // 线条颜色
              },
            },
            itemStyle: {
              normal: {
                color: color[2],
              },
            },
            areaStyle: {
              //区域填充样式
              normal: {
                //线性渐变,前4个参数分别是x0,y0,x2,y2(范围0~1);相当于图形包围盒中的百分比。如果最后一个参数是‘true’,则该四个值是绝对像素位置。
                color: new this.$echarts.graphic.LinearGradient(
                  0,
                  0,
                  0,
                  1,
                  [
                    {
                      offset: 0,
                      color: color[2],
                    },
                    {
                      offset: 1,
                      color: color1[2],
                    },
                  ],
                  false
                ),
                // shadowColor: color[2], //阴影颜色
                shadowBlur: 20, //shadowBlur设图形阴影的模糊大小。配合shadowColor,shadowOffsetX/Y, 设置图形的阴影效果。
              },
            },
            label: {
              normal: {
                show: false,
                position: "top", //在上方显示
                textStyle: {
                  //数值样式
                  color: color[2],
                  Size: this.fontSize(0.13),
                  fontWeight: 700,
                },
              },
            },
            // data: this.goodRate, //折线图数据
          },
        ],
      });
    },
  },
};
</script>
<style lang="scss" scoped>
@import "./css/rem.scss";

.item {
  width: 33%;
}
</style>

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

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

相关文章

【python】在Python中读取和加解密PDF文件的详细教程与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Python酷库之旅-第三方库Pandas(082)

目录 一、用法精讲 341、pandas.Series.str.startswith方法 341-1、语法 341-2、参数 341-3、功能 341-4、返回值 341-5、说明 341-6、用法 341-6-1、数据准备 341-6-2、代码示例 341-6-3、结果输出 342、pandas.Series.str.strip方法 342-1、语法 342-2、参数 …

go语言源码解读之数据结构堆

概述 堆(heap)&#xff0c;是一种计算中常用的数据结构。本文我们将探讨对的特性、实现细节以及实际应用场景。 基本概念 堆是一种特殊的完全二叉树。堆分为大顶堆与小顶堆。 大顶堆的特点是&#xff0c;父节点的值总是大于或等于其子节点的值。 小顶堆的特点是&#xff0c…

SocialFi新纪元:Match革新金融与社交的融合艺术

前言 Match在SocialFi领域的创新探索&#xff0c;或将金融与社交的融合艺术推向新的高度&#xff01; SocialFi自带"爆点”属性&#xff0c;Web 3.0巨型流量池 统计数据显示&#xff0c;2023年第三季度&#xff0c;全球约有54亿人活跃在互联网上&#xff0c;而社交媒体领…

江协科技STM32学习笔记(第13章 WDG看门狗)

第13章 WDG看门狗 13.1 WDG看门狗 13.1.1 WDG简介 看门狗就是程序运行的一个保障措施&#xff0c;我们得在程序中定期地喂狗&#xff0c;如果程序卡死了&#xff0c;没有在规定的时间里喂狗&#xff0c;那么看门狗硬件电路就会自动帮我们复位一下&#xff0c;防止程序长时间…

<keep-alive> 一分钟了解

<keep-alive> 一分钟了解 <keep-alive> 是 Vue.js 提供的一个抽象组件&#xff0c;它的主要用途是在页面或组件切换时保留其状态&#xff0c;避免重复执行昂贵的渲染操作&#xff0c;从而提升应用性能。 文章目录 <keep-alive> 一分钟了解 一、 <keep-ali…

Ubuntu如何实现每天定时关机

要在Ubuntu中实现每天定时关机&#xff0c;你可以使用cron来安排定时任务。以下是具体的步骤&#xff1a; 步骤 1: 创建脚本 打开终端。使用文本编辑器创建一个新的文件。例如&#xff1a; nano ~/shutdown_script.sh 步骤 2: 编写脚本 在编辑器中输入以下内容&#xff1a…

华府便利店信息管理系统

TOC springboot239华府便利店信息管理系统 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规…

花四小时,写了个在线实时绘制等值面图小软件,明晚上线,喜欢的小伙伴关注哦

科研党的福音&#xff0c;绘图再也不需要安装一堆软件了&#xff0c;可以在线绘图了&#xff1b; 只需要传入绘制的区间、色值、以及所需要绘制的数据就可以直接出图了&#xff0c;可绘制各种等值面图&#xff0c;比如降水分布&#xff0c;高温分布&#xff0c;人口分布&#x…

文心快码真的很好用!!!

最近被身边的好友安利到了一个百度的新产品文心快码&#xff08;comate&#xff09;&#xff0c;没想到体验下来真的很好用&#xff0c;非常容易上手&#xff0c;解放了我的双手&#xff0c;提高了代码生产力&#xff01;可能有很多小伙伴不知道怎么使用comate,而我作为这类工具…

C语言-将n个数输入时顺序的逆序排列,用指针函数实现

一、题目要求&#xff1a; 将n个数输入时顺序的逆序排列&#xff0c;用指针函数实现 二、程序: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {int n;printf("请输入一共有多少数:\n");scanf("%d", &n);int arr[100], i;…

大模型之二十五-人工智能新纪元

人类社会正式从信息科技时代步入了人工智能时代&#xff0c;相比信息科技革命&#xff0c;人工智能科技革命的影响要深远的多&#xff0c;在这新旧交替剧烈变革期&#xff0c;绝大多数人都有机会。 为了更好的理解人工智能科技革命&#xff0c;首先我们首先梳理一下技术的发展…

使用VNC-viewer对树莓派5 远程连接桌面—详细记录笔记版

树莓派5 的远程桌面连接&#x1f680; 在完成了对树莓派镜像的安装&#xff0c;以及点亮了屏幕之后&#xff0c;接下来就是为开发做一些准备&#xff0c;就是配置树莓派5的远程的桌面的操作&#xff0c;因为如果不这样的话&#xff0c;我在PC上和树莓派系统上分别进行作业的时候…

了解数据库中常用存储引擎数据结构(2)

目录 深入了解B树及其变种 BTree BTree B*Tree BTree并发机制 B-Link Tree 深入了解B树及其变种 先把我们要解释的B树变种都列出来&#xff0c;B树的变种主要有B树、B*树、B-Link树、COW B树、惰性B树、Bw树等。 下面具体来分析这些变种的优势和发展趋势。 BTree 下图…

C语言整数溢出的问题

补漏&#xff1a; 昨天我在开头提到-1的二进制如何表示&#xff0c;我在这里简单分析一下。 首先我们要明白有符号的数转换是需要补码的&#xff0c;所以我们想这个问题之前将补码的规则思考一遍&#xff08;首先将有符号的首位保留&#xff0c;后面几位取反后加一&#xff0…

数据结构初阶——算法复杂度超详解

文章目录 1. 数据结构前言1. 1 数据结构1. 2 算法 2. 算法效率2. 1 复杂度的概念 3. 时间复杂度3. 1 大O的渐进表示法3. 2 时间复杂度计算示例3. 2. 1 示例13. 2. 2 示例23. 2. 3 示例33. 2. 4 示例43. 2. 5 示例53. 2. 6 示例63. 2. 7 示例7 4. 空间复杂度4. 1 空间复杂度计算…

螺丝虽小,但其质量关乎家具安全——业内解读紧固件生产标准

螺丝是家具组装中不可或缺的部件&#xff0c;其质量直接影响到家具的牢固性和安全性。因此&#xff0c;在生产螺丝时&#xff0c;必须确保螺丝符合家具组装的耐用性和安全性要求。确保生产出来的螺丝符合家具组装的耐用性和安全性要求&#xff0c;需要从设计、材料选择、生产工…

思维导图软件哪个好?这里有4款专业工具供你选择!

如何选择适合自己的思维导图软件&#xff1f;哪个思维导图软件好&#xff1f;选择思维导图工具时需要考虑使用的场景&#xff0c;操作的难易程度和性价比。在此基础上&#xff0c;我筛选了4款比较优秀的思维导图工具分享给大家。 1、福昕导图软件 传送门&#xff1a;pdf365.cn…

重写的介绍

一、基本介绍 1、基本介绍 重写又称为覆盖(override)&#xff0c;即子类继承父类的属性和方法后&#xff0c;根据业务需求&#xff0c;再重新定义同名的属性或方法 2、案例演示 二、练习 class Person:nameNoneageNonedef __init__(self,name,age):self.namenameself.ageage…

FastAPI+SQLModel开发角色的增删改查接口实战,附完整代码

实现查询角色的功能 完整代码&#xff1a; router.get("/", summary"角色查询") def get_role(page: int 1,size: int 20,name: str "",nickname: str "",db: SASession Depends(get_db), ):"""分页查询文件&qu…