Echarts特殊用法总结

2023-11-13

最近做了一个微信公众号项目,使用Echarts绘制降雨量曲线、水库水位及库容曲线、大坝断面监测等图表。通过查阅官方文档及示例、度娘,与Echarts的距离更近了一步。
总结一下,不能直接在官网上找到答案的用法,有以下几处:

  1. x轴为value类型的用法
  2. 双Y轴的用法
  3. 自定义图形的绘制,包括line、text、polygon等的组合
  4. 贝塞尔曲线(待定)

先看下2个页面
在这里插入图片描述
在这里插入图片描述

x轴为value类型的用法

在绘制大坝剖面轮廓的时候,需要根据实际图纸大坝的宽度高度,以及各关键点位的坐标做数据的预处理。
实际图纸
大坝高度宽度及各关键点位坐标计算完成后,写入配置文件。官网示例中多是category类型的,value的没找到,网上搜索了一下,可以用二维数组作为series的data

 series : [
            {
                name:"大坝轮廓",
                type:'line',
                symbol: "none",
                data: [
                    [damX[0],damY[0]],
                    [damX[1],damY[1]],
                    [damX[2],damY[2]],
                    [damX[3],damY[3]],
                    [damX[4],damY[4]],
                    [damX[5],damY[5]],
                    [damX[6],damY[6]],
                    [damX[7],damY[7]],
                    [damX[8],damY[8]]
                ],
                areaStyle: {
                    normal: {
                        color: {
                            type: 'linear',
                            x: 0,
                            y: 0,
                            x2: 0,
                            y2: 1,
                            colorStops: [{
                                offset: 0, color: 'rgba(245,238,188,0.7)',
                            }, {
                                offset: 1, color: 'rgba(161,152,37,0.7)',
                            }],
                            globalCoord: false // 缺省为 false
                        },
                    }
                },
                lineStyle: {
                    color: "rgb(9,9,9)"
                }
            }
            ]

此处,我做了一点渐变色的填充。填充示例可以查阅官网series-line.areaStyle. color 属性。

双Y轴的用法

在水库水位库容页面,需要用到双Y轴同时显示水位高度与库容大小。双Y轴的实现其实比较简单,主要是series里的yAxisIndex属性设置。

        {
            name:chartdata.line_text[1],
            type:'line',
            data:chartdata.capatityList,
            showAllSymbol: true,
            markPoint : {
                label:{
                    normal:{
                        textStyle:{
                            color:'#fff',
                            fontWeight:'bold'
                        }
                    }
                },
                data : chartdata.KRPoint
            },
            yAxisIndex:1
        }

数据变化较小,像一条停止的心脏线:D。分别加了markpoint标识出最大水位与最大库容。同时这也是用户最关注的点。

自定义图形的绘制,包括line、text、polygon等的组合

大坝断面监测图中,包括大坝轮廓、设计水位、实际水位、测压管轮廓,渗压几个部分的绘制。大坝轮廓绘制如上。
设计水位的绘制比较简单,就是一条线段。用的是虚线(不是实际的水位),给出markpoint来标识警示水位。需要确定的是2个点,起始点X=0,Y=设计水位。终点的x需要计算,计算方法是根据图纸中的数据(按三角形处理)x=((designFL - 13.3)*33.9/13.3),Y=设计水位。
实际水位刚开始我也按线段处理,后来发现画出来的图不太美观,做个填充更合适点,表示实际水位以下、测压管渗压部分,都是有水。
这里的填充,是类型为custom的填充,与大坝 轮廓中type=‘line’的填充方式不同。这里也包括了多边形的绘制。在官网上没看到多边形的代码示例,刚开始不知道shape怎么设置points以及如何写return。后面查阅参考了一个博客,https://blog.csdn.net/qq_20042935/article/details/89847775

        {
                name:"当前水位",
                type: "custom",
                renderItem: function (params, api) {
                    polyPoints.push(api.coord([api.value(0), api.value(1)]));
                    var start = api.coord([0, chartdata.waterLevel]);

                    return {
                        type: 'group',
                        children: [{
                            type: 'polygon',
                            shape: {
                                points: echarts.graphic.clipPointsByRect(polyPoints, {
                                    x: params.coordSys.x,
                                    y: params.coordSys.y,
                                    width: params.coordSys.width,
                                    height: params.coordSys.height
                                })
                            },
                            style: api.style({
                                fill: "rgb(37,183,239)",
                                stroke: 'transparent'
                            })
                        }, {
                            type: 'text',
                            style:{
                                text:chartdata.waterLevel+"m" ,    //水位数据标志
                                x:start[0]+ 10,
                                y:start[1]+10
                            }
                        }]
                    };
                },
                data:[
                    [0,13.3],
                    [((chartdata.waterLevel - 13.3)*33.9/13.3),chartdata.waterLevel],
                    [0,chartdata.waterLevel]
                ]
            },

data就是三角形的3个点的坐标。
这里的start点,实际也可以利用dataindex来计算。我直接写死了。在测压管轮廓的图像绘制中,我用到了params的属性dataindex,表示data数组中的下标,代码如下:

        {
            name:"测压管轮廓",
            type: "custom",
            renderItem: function (params, api) {
                // var categoryIndex = api.value(0);
                var start = api.coord([api.value(0), api.value(1)]);
                var end = api.coord([api.value(2), api.value(3)]);
                var height = api.size([0, 1])[1] * (api.value(3) - api.value(1));

                var rectShape = echarts.graphic.clipRectByRect({
                    x: start[0],
                    y: end[1],
                    width: end[0] - start[0],
                    height: height
                }, {
                    x: params.coordSys.x,
                    y: params.coordSys.y,
                    width: params.coordSys.width,
                    height: params.coordSys.height
                });

                return {
                    type: 'group',
                    children: [{
                        type: 'rect',
                        shape: rectShape,
                        style: api.style({fill: 'transparent', stroke: 'black'})
                    }, {
                        type: 'line',
                        shape: {
                            x1:start[0],y1:end[1],x2:start[0] + 50,y2:end[1]
                        },
                        style: api.style({stroke: 'black'})
                    }, {
                        type: 'text',
                        style:{
                            text:api.value(3)+'m',
                            x:start[0] + 5,
                            y:end[1]-10
                        }
                    }, {
                        type: 'text',
                        style:{
                            text:pressureName[params.dataIndex],
                            x:start[0] - 25,
                            y:start[1]-10
                        }
                    }]
                };
            },
            encode: {
                x: [1, 3],      // 表示维度 3、1 映射到 x 轴。
                y: [2, 4]       // 表示维度 2、4 映射到 y 轴。
            },
            data: [
                [piezometer_fracture[0],piezometer_fracture[1],piezometer_fracture[2],piezometer_fracture[3]],
                [piezometer_fracture[4],piezometer_fracture[5],piezometer_fracture[6],piezometer_fracture[7]],
                [piezometer_fracture[8],piezometer_fracture[9],piezometer_fracture[10],piezometer_fracture[11]],
                [piezometer_fracture[12],piezometer_fracture[13],piezometer_fracture[14],piezometer_fracture[15]]
            ]
        },

测压管的名称如C11,C10,C9,C8等,单独保存在一个数组中,根据断面的不同,名称有所不同。从左到右绘制,对应pressureName的各元素。

贝塞尔曲线

各测压管的渗压水位,连成一条线就是大坝的浸润线示意图。在custom类型的series中,有一种类型是返回series-custom.renderItem.return_bezierCurve. type = bezierCurve。这里指的是绘制二次或三次贝塞尔曲线。在该项目中,我仅用smooth:0.4平滑了一下。可能跟实际的浸润线有所出入。后面如果要调整浸润线的形态的话,可以用上贝塞尔曲线了。
此处查阅了贝塞尔曲线调整参数对应实际曲线的资料。http://blogs.sitepointstatic.com/examples/tech/canvas-curves/bezier-curve.html
贝塞尔曲线
具体就是要调整shape属性中的起始点,结束点,以及控制点的值(1或2个控制点)来满足要求。
问题最大的一段可能是:
大坝浸润线
这里接的都是实际的数据,但是第一段浸润线也应该不对。渗压管的水位按说不能跟实际水位差这么多的。
待客户验收前再来调整。

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

Echarts特殊用法总结 的相关文章

  • Open3D (C++) 点云随机渲染颜色

    目录 一 概述 二 代码实现 三 结果展示 一 概述 Open3D中颜色的取值范围是 0 0 1 0 C 中的函数rand 可以用来生成随机数 其返回值是整数 要生成0 0 1 0之间的浮点数 必须经过转换 首先生成一个0 N的随机数 再除
  • Hololens入门开发(二)unity项目设置及MR开发包导入

    一 新建一个u3d项目 二 将unity的平台切换为Universal Windows Platform 三 MR开发包导入 开发包链接来自Github 根据需要的版本进行选择 https github com microsoft Mixe
  • Exchange Server 2016 安装部署

    目录 0x01 简介 0x02 环境准备 0x03 添加角色与功能 配置Active Directory 域服务 0x04 安装ExchangeServer 点击 setup 不检查更新 点击 下一步 接受许可 不使用推荐设置 选择邮件角色
  • element-ui 整体替换主题色

    自定义主题 Element 默认提供一套主题 CSS 命名采用 BEM 的风格 方便使用者覆盖样式 我们提供了三种方法 可以进行不同程度的样式自定义 仅替换主题色 如果仅希望更换 Element 的主题色 推荐使用在线主题生成工具 Elem
  • MySQL锁之一:锁详解

    一 什么是死锁 死锁是指两个或两个以上的进程在执行过程中 因争夺资源而造成的一种互相等待的现象 若无外力作用 它们都将无法推进下去 此时称系统处于死锁状态或系统产生了死锁 这些永远在互相等的进程称为死锁进程 二 死锁产生的四个必要条件 互斥
  • Go-cli框架Cobra

    Cobra是前go语言负责人spf13开发的一款go cli框架 可以轻松规范的处理cli应用场景 项目地址 https github com spf13 cobra作者博客 https spf13 com 所谓官网 https cobra
  • len()函数

    len 函数 描述 len 函数返回对象 字符 列表 元组等 长度或项目个数 语法 len 方法语法 len s 参数 s 对象 返回值 返回对象长度 实例 以下实例展示了 len 的使用方法 str 1111111111111 print
  • Python 11 (paramiko模块,ssh密钥,进程线程,锁,信号量)

    本节内容 paramiko模块 基于SSH用于连接远程服务器并执行相关操作 paramiko模块 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接 Author yyqian import paramiko 创建SS
  • android studio f5,AndroidStudio 快捷鍵

    8种机械键盘轴体对比 本人程序员 要买一个写代码的键盘 请问红轴和茶轴怎么选 符號說明 gt option alt gt shift gt control gt command gt esc 注 与F6 F7 F12等F功能键开头的组合的快
  • java中String、StringBuffer、StringBuilder的区别

    java中String StringBuffer StringBuilder是编程中经常使用的字符串类 他们之间的区别也是经常在面试中会问到的问题 现在总结一下 看看他们的不同与相同 三者共同之处 都是final类 不允许被继承 主要是从性
  • msvcp140.dll丢失如何修复?win7丢失msvcp140.dll的修复方法

    有win7用户在操作电脑的过程中 遇到msvcp140 dll丢失的情况 这是怎么回事 一般是由于系统中丢失dll文件导致的 下面就和小编一起来看看具体的解决办法吧 MSVCP文件的版本 这是我电脑上安装的各版本 VC 版本间互相不重复 并
  • javac不是内部或外部命令,也不是可运行的程序 或批处理文件的细节问题(window10)

    目录 步骤一 找到JDK下的bin目录 运行cmd 输入javac 能提示 说明环境配置有问题 步骤二 cmd输入 path 步骤三 看看下载的JDK包解压后目录对不对 步骤四 检查是否有环境冲突 最后 环境变量配置 描述 打开cmd 输入
  • 前后台交互时客户端请求的中文字变成问号

    今天在写form表单的时候发现提交的中文字在后台接收的时候变成了 如下图 经过检查发现是编码格式的不统一的问题 前台给数据设置了编码格式 而后台没有设置编码格式 就造成了中文字不能识别
  • spring boot中web容器配置

    web容器配置 spring boot 默认的web容器是 tomcat 如果需要换成其他的 web 容器 可以如下配置
  • windows下nginx配置为服务

    1 下载winswx 下载地址 winsw下载 2 解压后将其重命名为 nginx service 并将其放到nginx目录下 3 新建一个文本文档内容如下 里面的路径根据自己的情况修改
  • mysql 8 窗口函数

    使用mysql8 遇到一个问题 分区之后排序 得到的结果不是预想中的值 而把排序取消之后 能够得到正确的结果 如图所示 搞不懂 大佬解释下
  • hadoop datanode没有启动

    datanode启动不了 即执行命令 bin hadoop namenode format 后 默认地址tmp hadoop 1 dfs data current VERSION namenod 和datanode 的clusterid不一
  • Qt5.9中QMessageBox输出变量的用法(或者是字符串添加变量的方法):tr("%1").arg(variable)

    本文主要总结在Qt5 9的Creator4 4 1中 在弹出框QMessageBox中输出变量的方法之一tr 1 arg variable 具体的示例如下所示 str tr 这是变量 QMessageBox warning this tr
  • 基于Vue项目的富文本vue-quill-editor的使用

    基于Vue项目的富文本vue quill editor的使用 文章目录 基于Vue项目的富文本vue quill editor的使用 一 背景 二 Vue Quill Editor使用 1 简介 2 安装 3 挂载到项目 1 全局挂载 2

随机推荐

  • CentOS8 Keepalived 高可用测试

    keepalived 安装与使用 介绍 软件原理 准备工作 软件安装 配置文件 启动 介绍 Keeplived 是一款系统插件 工作在TCP IP 层 通过虚拟IP对外提供服务 当主节点出现故障时 能自动切换到从节点 达到一个高可用的目的
  • ZooKeeper数据存储与数据同步机制

    ZooKeeper中 数据存储分为两部分 内存数据 ZKDatabase 与磁盘数据 事务日志 事务快照 ZKDatabase ZooKeeper的数据模型是一棵树 而从使用角度看 ZooKeeper就像一个内存数据库一样 在内存数据库中
  • 损失函数(loss function)(基本介绍,作用,场景,特点,常见损失函数,代码示例)

    一 损失函数是什么 损失函数 Loss Function 是机器学习和深度学习中的一个重要概念 用于衡量模型预测结果与真实结果之间的差异或误差 它是一个数值评估指标 通过对模型输出和真实标签之间的比较 提供了对模型性能的度量 二 损失函数的
  • 时序预测

    时序预测 MATLAB实现基于BiLSTM双向长短期记忆神经网络的时间序列预测 递归预测未来 多指标评价 目录 时序预测 MATLAB实现基于BiLSTM双向长短期记忆神经网络的时间序列预测 递归预测未来 多指标评价 预测结果 基本介绍 程
  • 100流明相当于多少w_1978年的100元, 相当于现在的多少钱? 答案“出乎意料”...

    点上面蓝色字免费关注 如今的钱是越来越不值钱 每个月四五千的工资在没有负债的情况下 也就刚好够家庭使用 如果有房贷车贷等其他负债 四五千的工资根本就养不活一个家 很多人都怀念七八十年代的生活 一个月几十元工资就能养活一家人而且还没有什么生活
  • maven 打包时异常 <找不到符号 [ERROR] 符号: 方法>

    被依赖项目没有打包到本地仓库 或者没有上传到远程仓库 ERROR Failed to execute goal org apache maven plugins maven compiler plugin 3 3 compile defau
  • 从0到1开发一个React组件库

    背景 前端技术的不断发展过程中 组件化 模块化已成为主流 当开发的项目中有一些公共组件可以沉淀的时候 将这些组件抽离出来 开发一个组件库无疑是一个好的选择 那么怎么去开发一个组件库呢 本文将和你一起从零开发一个 React 组件库 本文项目
  • C#中定义数组

    一 一维 int numbers new int 1 2 3 4 5 6 不定长 int numbers new int 3 1 2 3 定长 二 多维 int numbers new int 1 2 3 1 2 3 不定长 int num
  • C语言——打鱼晒网问题

    一 实例说明 如果一个渔夫从 2011 年 1 月 1 日开始每三天打一次渔 两天晒一次网 编程实现当输入 2011 年1月1日以后的任意一天 输出该渔夫是在打渔还是在晒网 二 实现代码 include
  • SCORE-BASED GENERATIVE MODELING THROUGH STOCHASTIC DIFFERENTIAL EQUATIONS 阅读笔记

    文章提出了一个基于随机微分方程的生成模型 Denoising Score Matching with Annealed Langevin Sampling SMLD 和 Denoising Diffusion Probabilistic M
  • prometheus + grafana 实时监控 Windows性能

    Prometheus 实时监控 Windows性能 Prometheus 简介 Prometheus 具有以下特点 Prometheus 组件 Prometheus功能特性 在业务层用作埋点系统 在应用层用作应用监控系统 在系统层用作系统监
  • 在运用tf_ops算子时出现InvalidArgumentError (see above for traceback): No OpKernel was registered to support

    在运用tf ops算子时出现InvalidArgumentError see above for traceback No OpKernel was registered to support Op FarthestPointSample
  • C++从入门到放弃之:C++ 模板之自制容器

    自制链表容器 1 include
  • DNS递归查询和迭代查询的区别

    1 递归查询 递归查询是由DNS 服务器主动帮主机查询的查询模式 在该模式下本地DNS 服务器接收到主机的请求 如果本地DNS 服务器没有存储相关的DNS 信息 那么该DNS 服务器会询问其他DNS 服务器 以此类推 最后不管成功与否 都将
  • 2020ciscn wp

    目录 1 签到电台 2 基于挑战码的双向认证 1 2 3 web Ezpo 4 基于挑战码的双向认证3 5 ISO9798 6 问卷调查 7 ez usb 8 login nomal 1 签到电台 操作内容 根据公众号提示 知道了模十的算法
  • SeleniumLibrary4.5.0 关键字详解(八)

    SeleniumLibrary4 5 0 关键字详解 八 库版本 4 5 0 库范围 全局 命名参数 受支持 简介 SeleniumLibrary是Robot Framework的Web测试库 本文档说明了如何使用SeleniumLibra
  • Zigbee协议栈(CC2530开发板) 修改发射功率

    Zigbee协议栈 CC2530开发板 修改发射功率 2010 12 07 15 11 43 分类 Zigbee 标签 zigbee 协议栈 发射功率 字号 订阅 CC2530 控制输出功率的寄存器是 TXPOWER 推荐功率设置 协议栈默
  • 矩阵求导——Numerator Layout & Denominator Layout

    突然想起这个问题了 刚刚看到有人在问某个的公式 自己闷头想了想居然都忘的差不多了 于是乎稍微整理一下供以后参考 其实 关于矩阵求导讲的最详细的还是wiki上的页面面http en wikipedia org wiki Matrix calc
  • 【janio】janio 官网 翻译 Janino 是一个超小、超快的 Java 编译器

    1 概述 翻译 http janino compiler github io janino janino as a 20compiler Janino 是一个超小 超快的 Java 编译器 Janino不仅可以像JAVAC一样将一组源文件编
  • Echarts特殊用法总结

    最近做了一个微信公众号项目 使用Echarts绘制降雨量曲线 水库水位及库容曲线 大坝断面监测等图表 通过查阅官方文档及示例 度娘 与Echarts的距离更近了一步 总结一下 不能直接在官网上找到答案的用法 有以下几处 x轴为value类型