echarts自定义仪表盘样式及一些属性了解

目录

一、自定义仪表盘

1.仪表盘相关

2.常用属性

(1)series

(2)graphic

 二、自定义仪表盘

1.基本仪表盘绘制

2.分析结构,分别绘制

(1)自定义形状

(2)仪表盘各部分

三、示例代码


如图样子的:

一、自定义仪表盘

echarts官网相关内容:Documentation - Apache ECharts

UI设计稿一般样式丰富,前端所做自定义仪表盘通常涉及对仪表盘的各种配置项进行调整和设置,以满足需求。在Echarts中,自定义仪表盘主要通过对graphic自定义形状或option对象中的series数组中相关属性来设置实现。

1.仪表盘相关

这里主要用到以下两个

(1)series

里面可用于配置仪表盘的数据系列,包括数据值、指针样式、背景颜色等。其中type属性应设置为'gauge',以指明这是一个仪表盘图表。

(2)graphic

echarts中的graphic是原生图形元素组件,主要用于向图表中添加自定义图形或文本元素。自定义元素可以包括图像、文本、圆形、矩形等各种形状或实现其他视觉效果。通过graphic,用户可以在图表中的任意位置添加所需的内容,很实用。

2.常用属性

(1)series

type: "gauge",:仪表盘。

radius:用于配置仪表盘的半径大小,可以设置为百分比或具体的像素值。

startAngle/endAngle:用于配置仪表盘的起始角度和结束角度,可以控制指针的旋转范围。

center:用于设置仪表盘的中心点位置,可以是一个包含两个元素的数组,分别表示中心点的横坐标和纵坐标(相对于容器的百分比)。

axisLine:用于配置仪表盘的刻度线样式,包括刻度线的颜色、宽度、长度等。

splitLine:用于配置仪表盘的分隔线样式,可以通过lineStyle属性来设置分隔线的颜色和宽度。show属性用于控制分隔线是否显示,length属性用于设置分隔线的长度(正负代表方向)。

splitNumber:用于设置分隔线的数量,即仪表盘被分隔成的区间数。

pointer:用于配置仪表盘的指针样式,包括指针的长度、宽度、颜色等。如果不需要指针,可以将show属性设置为false

progress:进度条样式。

注意:progress只有echarts5版本以上才可以使用

axisTick:用于配置仪表盘的刻度样式,包括刻度的长度、颜色等。show属性用于控制刻度是否显示。

axisLabel:用于配置仪表盘的刻度标签样式,包括标签的显示位置、颜色等。show属性用于控制标签是否显示,distance属性用于设置标签与轴线的距离(正负同length),color属性用于设置标签的颜色。

detail:用于配置仪表盘的数据标签样式,包括数据标签的位置、字体、颜色等。formatter属性用于设置数据标签的显示格式,可以是一个函数或字符串模板。offsetCenter属性用于设置数据标签相对于仪表盘中心的偏移量。rich属性用于设置丰富的文本样式。

title:用于配置仪表盘的标题样式,包括标题的位置、字体、颜色等。

itemStyle:用于配置仪表盘的整体样式,包括背景颜色、阴影效果等。

textStyle:用于配置仪表盘中文字的样式,包括字体大小、颜色、粗细等。

其他属性:这里暂时没有用到

backgroundColor:用于配置仪表盘的背景颜色。

animation:用于配置仪表盘的动画效果,包括动画的持续时间、缓动效果等。

markPoint:用于配置仪表盘的标注点,可以在图表中标注特定数值点。

markLine:用于配置仪表盘的标注线,可以在图表中标注特定数值范围。

markArea:用于配置仪表盘的标注区域,可以在图表中标注特定数值区域。

toolbox:用于配置仪表盘的工具箱,包括导出图片、数据视图等功能。

grid:用于配置仪表盘的图表区域的位置和大小。

legend:用于配置仪表盘的图例样式,包括图例的位置、字体、颜色等。但请注意,仪表盘通常不使用图例,因此这个属性在大多数情况下可能不适用。

dataZoom:用于配置仪表盘的数据缩放功能,可以控制数据的展示范围。这在处理大量数据或需要查看数据细节时非常有用。

(2)graphic

type:指定图形元素的类型。常见的类型包括'rect'(矩形)、'circle'(圆形)、'ellipse'(椭圆)、'polygon'(多边形)、'polyline'(折线)、'text'(文本)和'image'(图像)等。

shape

对于圆形(circle),形状属性包括圆心坐标(cxcy)和半径(r)。

对于矩形(rect),形状属性包括左上角坐标(xy)、宽度(width)和高度(height)。

对于多边形(polygon)和折线(polyline),形状属性是一个点数组,每个点包含xy坐标。

style:定义图形元素的样式属性,如填充颜色(fill)、边框颜色(stroke)、边框宽度(lineWidth)、透明度(opacity)等。

position:是一个包含leftrighttopbottomcenter等值的对象或数组,用于指定元素相对于容器的位置。

size:是一个包含widthheight的对象,用于指定元素的尺寸。

rotate:定义图形元素的旋转角度,以弧度为单位。正值表示顺时针旋转,负值表示逆时针旋转。

z 或 zlevel:控制图形元素在堆叠顺序中的层级。z通常用于控制同一层级内元素的堆叠顺序,而zlevel用于控制不同层级之间的堆叠顺序。

silent:指定图形元素是否响应鼠标事件。如果设置为true,则元素不会触发任何鼠标事件。

draggable:指定图形元素是否可拖动。如果设置为true,则用户可以通过鼠标拖动元素。

 二、自定义仪表盘

1.基本仪表盘绘制

在官网找一个基本的,跟自己想要样式差不多的仪表盘,复制代码。复制下来基本不是自己想要的样式。

2.分析结构,分别绘制

根据ui图样式,这个仪表盘外层有两个圆,中间有个小圆加指针,仪表盘指针在进度条外围,进度条渐变颜色......

因为graphic与series是两部分,没有在同一位置,所以需要定下位,在绘制自定义形状。

(1)自定义形状

getBoundingClientRect()方法:使用panel.getBoundingClientRect()方法获取容器的大小和位置信息,并从中提取出宽度(width)和高度(height)。

计算圆心坐标let cx = 容器width / 2; 和 let cy = 容器height / 2;计算容器的中心坐标,即圆心的位置。

(2)仪表盘各部分

// 进度条样式

三、示例代码

以下是一个简单Echarts仪表盘示例代码,展示了如何配置一个自己想要的仪表盘:

完整代码如下:

    getPanel() {
      let panel = document.getElementById("instrument_panel");
      this.panel = window.echarts.init(panel);

      // 获取容器的尺寸
      let rect = panel.getBoundingClientRect();
      let width = rect.width;
      let height = rect.height;
      
      let cx = width / 2;
      let cy = height / 2;

      let option = {
        graphic: [
          // 外层圆
          {
            type: 'circle',
            shape: {
              cx: cx,
              cy: cy,
              r: 50
            },
            style: {
              fill: '#08134B',
            }
          },
          // 里层圆
          {
            type: 'circle',
            shape: {
              cx: cx,
              cy: cy,
              r: 44
            },
            style: {
              fill: '#0A2B72',
            },
          }, 
          // 圆心
          {
            type: 'circle',
            shape: {
              cx: cx,
              cy: cy,
              r: 14
            },
            style: {
              fill: '#093E8C',
            },
          }, 
        ],
        series: [
          // 仪表盘
          {
            type: "gauge",
            startAngle: 235, // 起始角度
            endAngle: -55, // 结束角度
            radius: "44%", // 设置仪表盘的半径
            center: ["50%", "52%"],
            // 仪表盘轴线相关配置
            axisLine: {
              lineStyle: {
                width: 12,
              },
              roundCap: true,
            },
            // 仪表盘刻度样式
            axisTick: {
              show: true,
              distance: -20,
              length: 2,
              splitNumber: "10", //分隔线之间分割的刻度数
              lineStyle: {
                width: 1,
                color: "#05D2FF"
              }
            },
            // 仪表盘的分割线样式
            splitLine: {
              show: true,
              distance: -22,
              length: 4,
              lineStyle: {
                width: 1,
                color: "#05D2FF",
              }
            },
            // 仪表盘的指针样式
            pointer: {
              showAbove: true,
              width: 4,
              itemStyle: {
                color: '#4896FF'
              }
            },
            axisLabel: {
              show: false,
            },
            splitNumber: 5, // 仪表盘刻度的分割段数
            progress: {
              show: true,
              width: 12,
              roundCap: true,
              itemStyle: {
                // 渐变颜色
                color: new echarts.graphic.LinearGradient(0,0,0,1,[
                  { offset: 0, color: "#3966E3" },
                  { offset: 0.2, color: "#0ACDFB"},
                  { offset: 0.8, color: "#0ACDFB"},
                  { offset: 1, color: "#3966E3"}
                ])
              }
            },
            detail: {
              valueAnimation: true,
              fontSize: 10,
              fontWeight: 'bold',
              color: '#CC20B0',
              offsetCenter: [0, "90%"],
              formatter: '{value}%',
            },
            data: [
              {
                value: 70
              }
            ]
          },
        ]
      };
      option && this.panel.setOption(option);
    },

若文章对你有帮助,点个赞吧!

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

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

相关文章

图神经网络代码学习—基本使用与分类任务

初步接触图神经网络代码 环境配置 对于在多目标跟踪中应用图匹配网络,需要学习使用GNN图神经网络,对于图神经网络的实现需要学习使用一下库和项目来进行实践。 PyG(PyTorch Geometric)是一个建立在 PyTorch 基础上的库&#xf…

操作系统:死锁与饥饿

目录 死锁概念 饥饿与饿死概念 饥饿和死锁对比 死锁类型 死锁条件(Coffman条件) 死锁恢复方法 死锁避免 安全状态与安全进程序列: 银行家算法: 死锁检测时机(了解): 死锁检测 死锁案…

SkyWalking Helm Chart 4.7.0 安装、配置

https://skywalking.apache.org/events/release-apache-skywalking-kubernetes-helm-chart-4.7.0/https://github.com/apache/skywalking-helm/tree/v4.7.0https://skywalking.apache.org/zh/2020-04-19-skywalking-quick-start/简介 skywalking 是分布式系统的 APM(Applicat…

electron 打包 webview 嵌入需要调用电脑摄像头拍摄失败问题

electron 打包 webview 嵌入需要调用电脑摄像头拍摄失败问题 这篇文章是接我cocos专栏的上一篇文章继续写的,我上一篇文章写的是 cocos 开发触摸屏项目,需要嵌入一个网页用来展示,最后通过 electron 打包成 exe 程序,而且网页里面…

嵌入式Linux应用开发中CAN通信实现

14.1 CAN介绍 14.1.1 CAN是什么? CAN,全称为“Controller Area Network”,即控制器局域网,是国际上应用最广泛的现场总线之一。最初,CAN 被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置 ECU 之间交换信息,形成汽车电子控制网络。比如:发动机管理系统、变速…

Grafana功能菜单介绍

Grafana的功能菜单设计为侧边栏(sidebar)形式,可以折叠隐藏,便于我们更加专注数据的可视化。现将菜单栏各项功能进行编号讲解,如下图所示:① Grafana Logo 在这里插入图片描述 点击Grafana的logo,无论当前处于哪个页面,都会跳转回Home Page(主页)。② 新建与导入用于…

MVC基础——市场管理系统(二)

文章目录 项目地址三、Produtcts的CRUD3.1 Products列表的展示页面(Read)3.1.1 给Product的Model里添加Category的属性3.1.2 View视图里展示Product List3.2 增加Product数据(Add)3.2.1 创建ViewModel用来组合多个Model3.2.2 在_ViewImposts里引入ViewModels3.2.3 添加Add的…

前端 mp4 视频改成 m3u8 流模式

前端 mp4 视频改成 m3u8 流模式 mp4 视频的问题 1、mp4 视频通常对应一个文件,播放时需要加载全部文件,消耗网络资源。如果用户从中间某个时间访问,也会从头开始下载,浪费服务器性能。 2、mp4 视频文件容易被用户下载到本地。有…

爬虫基础之代理的基本原理

在做爬虫的过程中经常会遇到一种情况,就是爬虫最初是正常运行、正常抓取数据的,一切看起来都是那么美好,然而一杯茶的工夫就出现了错误,例如 403 Forbidden,这时打开网页一看,可能会看到“您的IP访问频率太…

如何将自己的PHP类库发布到composer仓库

将自己的 PHP 类库发布到 Composer 仓库,需要经过一系列的准备和操作步骤,以下是详细说明: 准备工作 创建类库项目:确保你的 PHP 类库项目具有清晰的目录结构,遵循 PSR-4 等 PHP 编码规范。通常,类文件应…

频道web - 性能优化之往返缓存

性能优化之往返缓存 往返缓存简介:如何验证当前页面是否有往返缓存?有哪些开发场景可以用bfcache提升性能?哪些无需关注?阻止页面进行往返缓存的行为都有哪些?1、缓存2、强制刷新3、浏览器设置4、JavaScript 代码5、网络问题6、 iframe 本身不符合 bfcache 的条件为什么会…

当前热门 DApp 模式解析:六大方向的趋势与创新

去中心化应用(DApp)随着区块链技术的不断发展,已经成为 Web3 领域的核心创新之一。与传统应用不同,DApp 通过智能合约运行在区块链上,具有去中心化、透明、安全等特点。近年来,随着用户需求的变化和技术的发…

Windows中将springboot项目运行到docker的容器中

0,先打包好项目,再启动docker 1,在Java项目根目录下创建一个名为Dockerfile的文件(没有扩展名),并添加以下内容。 # 使用OpenJDK的基础镜像 FROM openjdk:8-jdk-alpine# 设置工作目录 WORKDIR /app# 将项…

使用html 和javascript 实现微信界面功能1

1.功能说明: 搜索模块: 提供一个搜索框,但目前没有实现具体的搜索功能。 好友模块: 在左侧的“好友”部分有一个“查看好友”按钮。点击左侧的“查看好友”按钮时,会在右侧显示所有好友的列表。列表中每个好友可以点击查看详情,包…

uniapp——H5中使用富文本编辑器,如何使用。

一、插件市场 去插件市场找到这个插件https://ext.dcloud.net.cn/plugin?id14726 二、引入 找到自己项目引入 项目里面多了很多文件 三、使用 找到A页面&#xff0c;在里面引入组件 <view class"editBox"><sp-editor exportHtml"handleExpor…

前端视角下的Go语法学习:创建 Go 项目

今日话题 使用 GoLand 创建 Go 项目 作者&#xff1a; 时间&#xff1a;2024年6月20日 17时16分14秒 主线任务 一、GoLand 创建项目 1、点击 “new Project” 按钮 2、已经有下载过两个 Golang SDK 版本&#xff0c;选择版本创建即可~ 3、如果没有下载过Golang SDK&#…

使用pyinstaller打包pyqt的程序,运行后提示ModuleNotFoundError: No module named ‘Ui_main‘

环境&#xff1a;windowpython3.9pyqt6 使用pyqt UI编辑器生成了main.ui &#xff0c;main.ui编译成了Ui_main.py main.py 使用当前目录下的Ui_main.py。 打包过程没报错&#xff0c;运行报错。 错误如下: 解决方法&#xff1a;pyinstaller -Fw main.py --paths. 使…

1. 机器学习基本知识(4)——机器学习测试和验证

1.6 测试和验证 了解模型对新实例的泛化能力的唯一方法是在新实例上进行实际尝试。 一种方法是将模型部署到生产环境并监控其性能。 ​ 这种方法很有效&#xff0c;但如果模型非常糟糕&#xff0c;你的用户就会抱怨&#xff0c;所以这显然不是最好的方法。 更好的选择是将数…

Qwen 论文阅读记录

本文仅作自己初步熟悉大模型&#xff0c;梳理之用&#xff0c;慢慢会更改/增加/删除&#xff0c;部分细节尚未解释&#xff0c;希望不断学习之后&#xff0c;能够完善补充。若有同道之人&#xff0c;欢迎指正探讨。 关于后面的code-qwen and math-qwen&#xff0c;我个人认为依…

yarn 安装问题

Couldn’t find package “regenerator-runtime” on the “npm” registry. Error: Couldn’t find package “watch-size” on the “npm” regist 标题Error: Couldn’t find package “babel-helper-vue-jsx-merge-props” on the “npm” registry. Error: Couldn’t f…