echarts图表,利用仪表盘类型变换成环形渐变图

2023-10-27

 使用仪表盘类型图表type:"gauge"变换成以上图片样式,实现环形图的渐变以及背景环

1.计算当前数据占总数的比例,从而得出当前环开始角度和结束角度,目前上图中开始角度都是0,结束角度通过数据占比得到 当前数据/三个数和*360 得到结束角度

2.利用角度计算出环形的渐变参数

代码过程:

1.新建vue文件gauge.vue

html:

<template>
  <div ref="chart" :id=chartID></div>
</template>

js代码:

export default {
  props: {
    id: {type: String, default: "gauge_line"}, // id名称
    processData: {
      type: Object, default: function () {
        return {
          tieleFontSize: 22,//标题文字大小
          labelfontSize: 22,//lable标签文字大小
          name:'',
          value:0,
          valueColor:'#ffffff',
          colorArr: [
            [
              {offset: 0, color: "#C0CDFF"},
              {offset: 1, color: "#156BFF"},

            ],
            [
              {offset: 0, color: "rgba(243,237,153,0)"},
              {offset: 1, color: "rgba(243,237,153,1)"}
            ],
            [
              {offset: 0, color: "rgba(140,181,255,0)"},
              {offset: 1, color: "rgba(140,181,255,1)"}
            ],
            [
              {offset: 0, color: "rgba(140,181,255,0)"},
              {offset: 1, color: "rgba(140,181,255,1)"}
            ],

          ],
        }
      }
    },
    max: {type: Number, default: 100}, // 最大值,也就是三个数据的和
  },
  data () {
    return {
      chartID: this.id + "_chart",
      myChart: null
    }
  },
  mounted () {

    //this.myChart.setOption(this.option)
  },
  methods:{
    initChart() {
      this.myChart = this.$echarts.init(document.getElementById(this.chartID));
      var angle = this.processData.value / this.max * 360;  // 计算当前数据项对应的角度
      let direction = this.getCoordinates(0, angle)
      let color = {
        type: 'linear',
        /*x:0,
        x1:0,
        y:0,
        y1:0,*/
        ...direction,
        colorStops: this.processData.colorArr[0]
      }
      this.myChart.setOption({
        series: [
          {
            type: 'gauge',
            splitNumber: 1,
            startAngle: 0,
            endAngle:360,
            max:this.max,
            radius: "100%",
            color:[color],
            center: ['50%', '50%'],
            progress: {
              show: true,
              roundCap:true,
              width: 20
            },
            axisLine: {
              lineStyle: {
                color: [[1, '#F2F6FB']],
                width: 20,
                opacity: 0.1,
              }
            },
            axisTick: {
              show: false
            },
            splitLine: {
              show: false,
              length: 20,
              distance: -20,
              lineStyle: {
                width: 2
              }
            },
            axisLabel: {
              show: false
            },
            anchor: {
              show: false
            },
            pointer: {
              show: false
            },
            title: {
              show: true,
              color: "#fff",
              fontSize: this.processData.tieleFontSize,
              fontFamily:"微软雅黑",
              offsetCenter: [0, '30%'],
            },
            detail: {
              valueAnimation: true,
              fontSize: 40,
              color: "#BCCAFF",
              fontFamily:"AGENCYB",
              offsetCenter: [0, "-10%"],
              //formatter: "{value}%",
              //formatter: "{a|value}{b|件}",
              formatter:function (param) {
                return "{a|"+param+"}{b|件}"
              },
              rich: {
                a: {
                  fontSize: this.processData.labelfontSize,
                  fontFamily:"AGENCYB",
                  color: this.processData.valueColor,
                },
                b: {
                  fontSize: 16,
                  fontFamily:"AGENCYB",
                  color: "#BED2FF",
                },}
            },
            data: [{
              value: this.processData.value,
              name: this.processData.name
            }]
          }
        ]
      })

    },
    getCoordinates(startArc, endArc) {
      const posi = [
        Math.sin(startArc),
        -Math.cos(startArc),
        Math.sin(endArc),
        -Math.cos(endArc)
      ]
      const dx = posi[2] - posi[0]
      const dy = posi[3] - posi[1]
      return this.getLocation(dx, dy)
    },
    getLocation(dx, dy) {
      const tanV = dx / dy
      const directSign = Math.abs(tanV) < 1
      const t = directSign ? tanV : 1 / tanV

      const sign1 = t > 0 ? 1 : -1
      const sign2 = dx > 0 ? 1 : -1
      const sign = directSign ? sign1 * sign2 : sign2

      const group1 = [0.5 - sign * t / 2, 0.5 + sign * t / 2]
      const group2 = sign > 0 ? [0, 1] : [1, 0]
      const group = [...group1, ...group2]
      const keys = directSign ? ['x', 'x2', 'y', 'y2'] : ['y', 'y2', 'x', 'x2']

      let res = {}
      keys.forEach((k, idx) => {
        res[k] = group[idx]
      })
      return res
    },
  },
  beforeDestroy() {
    if (this.myChart != null && this.myChart != "" && this.myChart != undefined) {
      this.myChart.dispose();
    }
    this.myChart=null
  },
  
}

2.将以上文件引入需要使用的页面

 import gaugeComponent from "./components/gauge";

<gaugeComponent ref="stageCaseGauge1" style="flex-grow:1;flex-basis:0;" :processData=stageCase_processData1  :id="'gauge1'" :max="gaugeMax"></gaugeComponent>

<gaugeComponent ref="stageCaseGauge2" style="flex-grow:1;flex-basis:0;" :processData=stageCase_processData2 :id="'gauge2'" :max="gaugeMax"></gaugeComponent>

<gaugeComponent ref="stageCaseGauge3" style="flex-grow:1;flex-basis:0;" :processData=stageCase_processData3 :id="'gauge3'" :max="gaugeMax"></gaugeComponent>

使用文件中data定义以下图表参数

stageCase_processData1:{
        tieleFontSize: 26,//标题文字大小
        labelfontSize: 40,//lable数字大小
        name:'测试1', //仪表盘 name 会被放在title位置
        value:981,
        valueColor:'#BCCAFF',
        colorArr: [
          [
            {offset: 0, color: "#156BFF"},
            {offset:1, color: "#C0CDFF"},
          ],
         ]
      },
      stageCase_processData2:{
        title: "",  //标题
        tieleFontSize: 26,//标题文字大小
        labelfontSize: 40,//lable数字大小
        name:'测试2',
        value:1921,
        valueColor:'#EEFBF9',
        colorArr: [
          [
            {offset: 0, color: "#009984"},
            {offset: 1, color: "#F9FFFE"},
          ],
        ]
      },
      stageCase_processData3:{
        tieleFontSize: 26,//标题文字大小
        labelfontSize: 40,//lable数字大小
        name:"测试3",
        value:1213,
        valueColor:'#EFFFC3',
        colorArr: [
          [
            {offset: 0, color: "#56E400"},
            {offset: 1, color: "#F6FFC8"},
          ],
        ]
      },

 gaugeMax参数为三个数据的和用来作为圆环的最大值 

3.执行初始化函数

this.$refs.stageCaseGauge1.initChart()
this.$refs.stageCaseGauge2.initChart()
this.$refs.stageCaseGauge3.initChart()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

echarts图表,利用仪表盘类型变换成环形渐变图 的相关文章

  • 使用 vscode 调试器调试 next.js

    我已经使用安装了一个项目创建下一个应用程序 https github com segmentio create next app 我需要使用我的编辑器 vscode 调试服务器端渲染 所以我访问过vscode recipes 如何调试 ne
  • 关闭选项卡时要求确认[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 当我在某些浏览器上关闭页面时 我希望出现一个消息框 并询问我是否真的要关闭页面 有两个按钮 如果我单击No那么这个标签就不会被关闭 我怎样
  • 从数据 URI 解码 QR 码

    我尝试从数据 uri 中解码二维码 var dataUri data image gif base64 R0lGODdh9gD2AIAAAAAAAP ywAAAAA9gD2AAAC decodeQrCode dataUri cb 我已经尝试
  • 尝试将布尔 C# 变量传递给 javascript 变量并将其设置为 true

    在我的 aspx 页面中 我将布尔变量 C 传递给需要布尔类型的 javascript 函数 但遇到了问题 但是 C 变量返回 True 而 javascript 不喜欢大写 myjavascript 如果我将 c 变量转换为字符串 那么我
  • jquery.find() 可以只选择直接子项吗?

    我应该向 jQuery find 提供什么参数来选择元素子元素而不选择其他元素 我不能用 gt 引导选择器 而用 将选择所有后代 而不仅仅是直接子代 我知道 jQuery children 但这是一个库 因此用户能够提供自己的选择器 并且我
  • 使用模数按字母顺序对列表进行排序

    我在获取元素列表并按字母顺序对它们进行排序方面没有任何问题 但我很难理解如何使用模数来做到这一点 更新 这是按我的方式工作的代码 但是 我更喜欢下面提供的答案的可重用性 因此接受了该答案
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 使用 Angular 下载具有动态 src 的脚本

    Angular 提供了通过动态名称动态加载模板的方法ng include 该部分中的内联 JS 和 CSS 可以正常加载 但没有一个好的方法来下载带有动态 url 的脚本 我们需要下载脚本 相对于调用它们的 html 部分的路径 即我们有一
  • 如何抑制窗口鼠标滚轮滚动...?

    我正在开发嵌入页面中的画布应用程序 我有它 因此您可以使用鼠标滚轮放大绘图 但不幸的是 这会滚动页面 因为它是文章的一部分 当我在 dom 元素上滚动鼠标滚轮时 是否可以阻止鼠标滚轮在窗口上滚动 附加鼠标滚轮 不是 Gecko DOMMou
  • 如何监听 jQuery AJAX 请求?

    以下两种实现 ajaxRequest 1 2 的方法应该是等效的 话说回来 为什么验证回调已执行的单元测试 3 在 1 中成功而在 2 中失败 我应该如何重写测试 3 来监视 2 中的成功回调 如果我尝试stub jQuery ajax使用
  • 表单计算器脚本基本价格未加载 OnLoad

    我的表单中有一个计算器来计算我的下拉选项选择 function select calculate on change calc input type checkbox calculate on click calc function cal
  • 通过 CDN 使用 Dojo 时如何加载自定义 AMD 模块?

    我正在使用 google 的 CDN 并尝试使用他们的加载程序加载我自己的 AMD 模块 我知道我做错了什么 但我被困住了 有任何想法吗
  • 提交表单并重定向页面

    我在 SO 上看到了很多与此相关的其他问题 但没有一个对我有用 我正在尝试提交POST表单 然后将用户重定向到另一个页面 但我无法同时实现这两种情况 我可以获取重定向或帖子 但不能同时获取两者 这是我现在所拥有的
  • Grails 在 javascript 内的 GSP 站点中使用 grails var

    我有一个在 GSP 文件中的 javascript 代码中使用 grails 变量值的问题 例如 我有一个会话值session getAttribute selectedValue 我想在 javascript 代码部分使用这个值 我现在的
  • 如何使用tampermonkey模拟react应用程序中的点击?

    我正在尝试使用 Tampermonkey 脚本模拟对 React 元素的点击 不幸的是 由于 React 有自己的影子 DOM 所以天真的方法使用document querySelector 不工作 我遇到了一些需要修改 React 组件本
  • 为 illustrator 导出脚本以保存为 web jpg

    任何人都可以帮我为 illustrator CC2017 编写一个脚本 将文件以 JPG 格式导出到网络 旧版 然后保存文件并关闭 我有 700 个文件 每个文件有 2 个画板 单击 文件 gt 导出 gt 另存为 Web 旧版 然后右键文
  • 为什么我不能在 AngularJS 中使用 data-* 作为指令的属性名称?

    On the t他的笨蛋 http plnkr co edit l3KoY3 p preview您可以注意到属性名称模式的奇怪行为data 在指令中 电话 Test of data named attribute br
  • Javascript转换时区问题

    我在转换当前时区的日期时间时遇到问题 我从服务器收到此日期字符串 格式为 2015 10 09T08 00 00 这是中部时间 但是当我使用 GMT 5 中的 new Date strDate 转换此日期时间时 它返回给我的信息如下 这是不
  • 如何更改此 jquery 插件的时区/时间戳?

    我正在使用这个名为 timeago 的插件 在这里找到 timeago yarp com 它工作得很好 只是它在似乎不同的时区运行 我住在美国东部 费城时区 当我将准确的 EST 时间放入 timeago 插件时 比如 2011 05 28
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成

随机推荐

  • FBX与Opengl骨骼系统

    转自 http blog csdn net mink365 article details 6328033 FBX是Autodesk提供的一个三维模型格式 由于AutoDesk已经收购了Maya 3D max等流行三维建模软件 FBX可以说
  • hadoop集群配置

    一个具体的配置 这里只搭建一个三台主机的小机群 10 37 128 2 master namenode jobtracker master 主机名 10 37 128 3 salve datanode tasktracker slave1
  • 在服务器上部署 Nginx 并设置图片服务器

    当您在服务器上部署 Nginx 并设置图片服务器时 以下是大致的步骤 安装 Nginx 使用适用于您的操作系统的包管理器安装 Nginx 编辑 Nginx 配置文件 找到 Nginx 的配置文件 通常位于 etc nginx nginx c
  • matplotlib柱状图给指定的柱换颜色_Python全栈之路-15-matplotlib

    本文jupyter notebook 地址 github com import numpy as np import pandas as pd import matplotlib import matplotlib pyplot as pl
  • Redis持久化RDB与AOF

    前言 我们知道Redis是一款内存服务器 就算我们对自己的服务器足够的信任 不会出现任何软件或者硬件的故障 但也会有可能出现突然断电等情况 造成Redis服务器中的数据失效 因此 我们需要向传统的关系型数据库一样对数据进行备份 将Redis
  • MySQL完整笔记

    注 本篇大部分内容都是尚硅谷mysql课程的笔记 如果需要课程以及源码 请至官网下载 下载地址 数据库 介绍 1 概念 1 DB 数据库 保存一组有组织的数据的容器 2 DBMS 数据库管理系统 又称为数据库软件 产品 用于管理DB中的数据
  • double类型(浮点数)是否相等的判断方法

    浮点数不精确 计算机内部无法用二进制的小数来精确的表达 public class Tesz public static void main String args double a 0 1 float c 0 1f System out p
  • MixFormer步骤流程概述

    参考图 Stage1 1 输入 模板 在线模板 搜索三组图像 2 为每个输入添加位置编码 实际上是nn Conv2d 通道3 gt 64 卷积核大小 7 7 步长 4 4 填充 2 2 的卷积操作 然后归一化 3 模板 在线模板和搜索做拼接
  • 二次函数求根c语言

    include
  • mac电脑 安装homebrew、nvm、node、nrm

    安装homebrew bin zsh c curl fsSL https gitee com cunkai HomebrewCN raw master Homebrew sh brew v 查看版本号 根据提示 继续执行 不然之后安装nvm
  • Linux正向区域dns搭建

    挂载光盘使用本地yum源文件 root www yum repos d mv repo bak root www yum repos d cd mnt root www mnt mkdir cdrom root www mnt mount
  • Java常用集合类、接口

    在Java中有一套设计优良的接口和类组成了Java集合框架 使程序员操作成批的数据或对象元素极为方便 所有的Java集合都在java util包中 1 List接口及其实现类 List接口继承于Collection接口 List接口及其实现
  • Django视图学习——在视图中使用模型

    视图不仅可以获取客户端长传的数据 还可以通过模型访问后台的数据库 本文介绍以下内容 1 在视图中输出模型数据 2 数据分页 1 在视图中输出模型数据 任务 定义一个模型 然后通过该模型范围访问数据库 1 在项目子文件夹chapter5中添加
  • go-gin 自定义应用metrics

    文章目录 前言 一 gin添加go运行时metrics 1 创建一个gin server 2 创建一个metrics的路由 3 启动服务 4 查看结果 metrics页面 pprof页面 二 gin自定义应用程序metrics 官方库示例
  • 在python环境下使用selenium + chromedriver截屏网页

    在python环境下使用selenium和chromedriver工具 自动将网页内容进行截屏保存 安装 selenium比较简单 如下即可 pip install selenium 据说 chromedriver的版本一定要与Chrome
  • 顺序表起步

    时间限制 1000ms 内存限制 256MB 1 按照课本 编写顺序表及其基本运算 顺序表定义使用以下代码 typedef int datatype 结点的数据类型 假设为int const int maxsize 100 最大表长度 假设
  • fstream、ifstream、ofstream和stringstream

    ifstream ifstream 是 C 标准库中用于文件读取的输入流类之一 用于从文件中读取数据 可以通过打开文件并将其与 ifstream 对象绑定 然后使用输入操作符 gt gt 从文件中读取数据 代码示例 include
  • pgsql删除表中所有数据_PostgreSQL数据库中的表和数据(Tables & Data)

    照顾好你的数据 数据库也会照顾你 保持数据库的整洁 查询起来也会更快 应用也会少些错误 半夜被叫醒解决数据问题并不酷 接下来 就和章郎虫博主一起来了解postgresql的表和数据吧 一 选择一个好的数据库对象名 Choosing good
  • Cascade-MVSNet CVPR-2020 学习笔记总结 译文 深度学习三维重建

    文章目录 4 Cascade MVSNet CVPR 2020 4 0 主要特点 4 1 背景介绍 4 2 代价体构造回顾 4 3 Cascade MVSNet 4 4 Loss的设置 4 5 Cascade MVSNet实战操作 4 6
  • echarts图表,利用仪表盘类型变换成环形渐变图

    使用仪表盘类型图表type gauge 变换成以上图片样式 实现环形图的渐变以及背景环 1 计算当前数据占总数的比例 从而得出当前环开始角度和结束角度 目前上图中开始角度都是0 结束角度通过数据占比得到 当前数据 三个数和 360 得到结束