Echart 极坐标 方位距离图 图标符号旋转以及大小 颜色渐变

背景:

参与一个交互式图表项目,客户有一个极坐标对比需求,展示不同方位不同距离的不同类型的指标数据。具体到属性字段则是:
来源、距离、方位、ID、旋转角度、大小
先看效果图:

技术点:

图例说明:距离为图例的径向轴,方位为图例的角度轴,不同类型需要用不同颜色,不同图标符号进行展示且需要根据旋转角度旋转以及大小参数绘制。
这是一个非常规极坐标图,首先要解决的是角度问题,从0到180(-180)再到0,按照常规思维极坐标的角度应该是一个排序规则而且默认是由小到大,此处的解决思路是:

1.方位问题

方位范围为0°到180°(-180°)再到0°,及整体的极坐标为360°,在此原则下需要注意一下问题:
a.角度轴(angleAxis)的刻度按照要求30°为一个刻度,则在角度小于等于180°保留原值,大于等于180°的需要减去360°。即:

"angleAxis": {
        max:360,
        min:0,
        "axisLabel": {
            "show": true,
            "color": "#000000",
            "fontSize": 10,
            "rotate": 0,
            "formatter":function (value, index) {
                if(value>180){
                  return value-360 + '°';
                }else{
                  return value + '°';
                }
            }
        },
}

b. 角度轴(angleAxis)的值(用户传递过来的方位)在0到180°时保留原值,-180°到0°时需要加上360°。

2.分组、图标、旋转、大小、颜色渐变

这些就是对应echart的相关属性
分组就是series不同数组即可。
图标对应的是series的symbol属性,如:"symbol": "arrow",
旋转对应的是series里具体数据的symbolRotate,如: "symbolRotate":76,
大小对应的是series的symbolSize,如:

"symbolSize":function(val){
              if(val[4]<3)
                return 3;
              else
                return val[4]*2
            },

颜色渐变:
 

 "itemStyle": {
                "color": {
                    "type": "radial",
                    "x": 0.4,
                    "y": 0.3,
                    "r": 1,
                    "colorStops": [
                        {
                            "offset": 0,
                            "color": "rgba(1,122,255,0.6)"
                        },
                        {
                            "offset": 1,
                            "color": "rgba(1,122,255,1)"
                        }
                    ],
                    "global": false
                }
            },

整理完以上技术点,结合测试数据就可以完成这个特殊极坐标的处理。

完整代码

option = {
    "title": {
        "text": "极坐标",
        "textStyle": {
            "fontWeight": "bold",
            "fontSize": 14,
            "color": "#000000",
            "fontStyle": "normal"
        },
        "show": true,
        "left": "8px",
        "top": "8px"
    },
    "grid": {
        "x": 0,
        "y": 0,
        "x2": 0,
        "y2": 0
    },
    "xAxis": {
        "min": -100,
        "max": 100,
        "axisTick": {
            "show": false
        },
        "axisLine": {
            "show": true,
            "lineStyle": {
                "color": "#CCCCCC",
                "width": 1,
                "style": "solid"
            }
        },
        "axisLabel": {
            "show": false
        },
        "splitLine": {
            "show": false
        }
    },
    "yAxis": {
        "min": -100,
        "max": 100,
        "axisTick": {
            "show": false
        },
        "axisLine": {
            "show": true,
            "lineStyle": {
                "color": "#CCCCCC",
                "width": 1,
                "style": "solid"
            }
        },
        "axisLabel": {
            "show": false
        },
        "splitLine": {
            "show": false
        }
    },
    "angleAxis": {
        max:360,
        min:0,
        "axisLabel": {
            "show": true,
            "color": "#000000",
            "fontSize": 10,
            "rotate": 0,
            "formatter":function (value, index) {
                if(value>180){
                  return value-360 + '°';
                }else{
                  return value + '°';
                }
            }
        },
        "splitLine": {
            "show": true,
            "lineStyle": {
                "color": "#CCCCCC",
                "width": 1,
                "style": "solid"
            }
        },
        "axisLine": {
            "show": true,
            "lineStyle": {
                "color": "#cccccc",
                "width": 1,
                "style": "solid"
            }
        },
        "show": true,
        "axisTick": {
            "show": true,
            "lineStyle": {
                "color": "#cccccc",
                "width": 1,
                "style": "solid"
            }
        }
    },
    "radiusAxis": {
        "type": "category",
        "data": [
            "100",
            "300",
            "600"
        ],
        "z": 10,
        "axisLabel": {
            "show": true,
            "color": "#000000",
            "fontSize": 10,
            "rotate": 0,
            "formatter": "{value}"
        },
        "axisTick": {
            "show": false,
            "lineStyle": {
                "color": "#cccccc",
                "width": 1,
                "style": "solid"
            }
        },
        "axisLine": {
            "show": false,
            "lineStyle": {
                "color": "#cccccc",
                "width": 1,
                "style": "solid"
            }
        },
        "boundaryGap": true,
        "splitLine": {
            "show": true,
            "lineStyle": {
                "color": "#CCCCCC",
                "width": 1,
                "style": "solid"
            }
        },
        "show": true,
        "position": "left",
        "name": "",
        "nameTextStyle": {
            "color": "#000000",
            "fontSize": 10
        }
    },
    "polar": {
        "radius": [
            "10%",
            "70%"
        ]
    },
    "series": [
        {
            "name": "类别1",
            "type": "scatter",
            
            "data": [
                {
                    "value": [
                        "100",
                        -30,
                        'a128',
                        55,
                        16
                    ],
                     "symbolRotate":55,
                    "dimensionList": [
                        {
                            "id": "58295c72-e13a-4bf5-80e6-16d4253dec53",
                            "value": "100"
                        }
                    ],
                    "quotaList": [
                        {
                            "id": "84c1ad50-f031-4ee3-99d5-343761639e98"
                        }
                    ],
                },
                {
                    "value": [
                        "300",
                        110,
                        'a127',
                        20,
                        25
                    ],
                     "symbolRotate":20,
                    "dimensionList": [
                        {
                            "id": "58295c72-e13a-4bf5-80e6-16d4253dec53",
                            "value": "300"
                        }
                    ],
                    "quotaList": [
                        {
                            "id": "84c1ad50-f031-4ee3-99d5-343761639e98"
                        }
                    ]
                },
                {
                    "value": [
                        "600",
                        6.54,
                        'a126',
                        76,
                        30
                    ],
                     "symbolRotate":76,
                    "dimensionList": [
                        {
                            "id": "58295c72-e13a-4bf5-80e6-16d4253dec53",
                            "value": "600"
                        }
                    ],
                    "quotaList": [
                        {
                            "id": "84c1ad50-f031-4ee3-99d5-343761639e98"
                        }
                    ]
                }
            ],
            "itemStyle": {
                "color": {
                    "type": "radial",
                    "x": 0.4,
                    "y": 0.3,
                    "r": 1,
                    "colorStops": [
                        {
                            "offset": 0,
                            "color": "rgba(1,122,255,0.6)"
                        },
                        {
                            "offset": 1,
                            "color": "rgba(1,122,255,1)"
                        }
                    ],
                    "global": false
                }
            },
            "symbol": "arrow",
            "symbolSize":function(val){
              if(val[4]<3)
                return 3;
              else
                return val[4]*2
            },
            "label": {
                "show": false,
                "position": "inside",
                "color": "#000000",
                "fontSize": 10,
                "formatter": "{c}",
                "gaugeFormatter": "{value}",
                "labelLine": {
                    "show": true
                },
                "gaugeLabelFormatter": {
                    "type": "value",
                    "unit": 1,
                    "suffix": "",
                    "decimalCount": 2,
                    "thousandSeparator": true
                },
                "reserveDecimalCount": 2,
                "labelContent": [
                    "dimension",
                    "proportion"
                ],
                "modifyName": "show",
                "propertyName": "label-selector"
            },
            "z": 100,
            "coordinateSystem": "polar",
            "selectedMode": true,
            "select": {
                "itemStyle": {
                    "shadowBlur": 2
                }
            },
            
        },
        {
            "name": "类别2",
            "type": "scatter",
            "data": [
                {
                    "value": [
                        "100",
                        7.77,
                        'a123',
                        50,
                        22
                    ],
                    "symbolRotate":50,
                    "dimensionList": [
                        {
                            "id": "58295c72-e13a-4bf5-80e6-16d4253dec53",
                            "value": "100"
                        }
                    ],
                    "quotaList": [
                        {
                            "id": "acee783e-c4e7-4616-8fbf-e1e5b8e6f411"
                        }
                    ]
                },
                {
                    "value": [
                        "300",
                        -90,
                        'a124',
                        90,
                        23
                    ],
                    "symbolRotate":90,
                    "dimensionList": [
                        {
                            "id": "58295c72-e13a-4bf5-80e6-16d4253dec53",
                            "value": "300"
                        }
                    ],
                    "quotaList": [
                        {
                            "id": "acee783e-c4e7-4616-8fbf-e1e5b8e6f411"
                        }
                    ]
                },
                {
                    "value": [
                        "600",
                        9.08,
                        'a125',
                        0,
                        15
                    ],
                    "symbolRotate":0,
                    "dimensionList": [
                        {
                            "id": "58295c72-e13a-4bf5-80e6-16d4253dec53",
                            "value": "600"
                        }
                    ],
                    "quotaList": [
                        {
                            "id": "acee783e-c4e7-4616-8fbf-e1e5b8e6f411"
                        }
                    ]
                }
            ],
            "itemStyle": {
                "color": {
                    "type": "radial",
                    "x": 0.4,
                    "y": 0.3,
                    "r": 1,
                    "colorStops": [
                        {
                            "offset": 0,
                            "color": "rgba(98,186,70,0.6)"
                        },
                        {
                            "offset": 1,
                            "color": "rgba(98,186,70,1)"
                        }
                    ],
                    "global": false
                }
            },
            "symbol": "triangle",
             "symbolSize":function(val){
              if(val[4]<3)
                return 3;
              else
                return val[4]*2
            },
            "label": {
                "show": false,
                "position": "inside",
                "color": "#000000",
                "fontSize": 10,
                "formatter": "{c}",
                "gaugeFormatter": "{value}",
                "labelLine": {
                    "show": true
                },
                "gaugeLabelFormatter": {
                    "type": "value",
                    "unit": 1,
                    "suffix": "",
                    "decimalCount": 2,
                    "thousandSeparator": true
                },
                "reserveDecimalCount": 2,
                "labelContent": [
                    "dimension",
                    "proportion"
                ],
                "modifyName": "show",
                "propertyName": "label-selector"
            },
            "z": 100,
            "coordinateSystem": "polar",
            "selectedMode": true,
            "select": {
                "itemStyle": {
                    "shadowBlur": 2
                }
            }
        }
    ],
    "legend": {
        "show": true,
        "data": [
            "类别1",
            "类别2"
        ],
        "textStyle": {
            "color": "#000000",
            "fontSize": 10
        },
        "left": "center",
        "bottom": "8px",
        "orient": "horizontal",
        "icon": "circle",
        "pageIconColor": "#000000",
        "pageIconInactiveColor": "#8c8c8c"
    },
    "color": [
        "#017AFF",
        "#62BA46",
        "#FFC601",
        "#F7821B",
        "#FF5257",
        "#F74F9E",
        "#CC9494",
        "#955FBC",
        "#A55057"
    ],
    "tooltip": {
        "show": true,
        "trigger": "item",
        "confine": true,
        "textStyle": {
            "fontSize": 10,
            "color": "#000000"
        },
        "formatter": function(params){
          console.log(params)
          return  "ID:"+params.value[2]+"<br />距离:"+params.value[0]+"<br />方位:"+params.value[1]+"°<br />旋转:"+params.value[3]+"°"
        },
        "backgroundColor": "#FFFFFF",
        "modifyName": "trigger",
        "propertyName": "tooltip-selector",
        "borderColor": "#FFFFFF",
        "appendToBody": true
    }
};

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

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

相关文章

二、服务拆分及远程调用

目录 一、注意事项&#xff1a; 1.单一职责: 2.数据独立: 3.面向服务&#xff1a; 二、服务拆分例子&#xff1a; 三、远程调用例子&#xff1a; 微服务调用方式&#xff1a; 四、提供者与消费者 服务调用关系&#xff1a; 一、注意事项&#xff1a; 1.单一职责: 不同…

新用户可一次性买3年的优惠云服务器,看到价格泪奔了!

本文将综合介绍腾讯云主推的4款云服务器配置及其价格&#xff0c;并重点强调其特点和优势。其中两款3年的优惠云服务器&#xff0c;非常值得新用户选择&#xff01; 一、入门级配置&#xff1a;2核4G 5M带宽&#xff0c;一年166元 这款入门级配置适合初学者或者对资源需求不高…

淘宝API接口开发系列,获取商品详情,按关键词搜索商品,拍立淘,商品评论销量商品类目,买家卖家订单接口等演示案例

关键词推荐API接口通过提供相关的关键词推荐&#xff0c;能够帮助用户更快捷地搜索、改善用户体验&#xff0c;同时也对于SEO优化、广告投放、内容创作和个性化推荐等方面有着重要的作用。 item_search-按关键字搜索淘宝商品 公共参数 名称类型必须描述keyString是调用key&am…

一文简单聊聊protobuf

目录 基本介绍 原理 同类对比 为什么要使用protobuf? 基本介绍 protobuf的全称是Protocol Buffer&#xff0c;是Google提供的一种数据序列化协议。Protocol Buffers 是一种轻便高效的结构化数据存储格式&#xff0c;可以用于结构化数据序列化&#xff0c;很适合做数据存储…

Vue 3.0 + vite + axios+PHP跨域问题的解决办法

最后一个Web项目&#xff0c;采用前后端分离。 前端&#xff1a;Vue 3.0 viteelement plus 后端&#xff1a;PHP 运行时前端和后端是两个程序&#xff0c;前端需要时才向后端请求数据。由于是两个程序&#xff0c;这就会出现跨域问题。 比如前端某个地方需要请求的接口如下…

2023年度实用Figma插件大放送!

根据统计&#xff0c;自2018年以来&#xff0c;Sketch的使用率已经从42%下降到31%&#xff0c;而Figma的使用率已经从12%上升到26%。为什么Figma如此受欢迎&#xff1f;为什么有越来越多的设计师倾向于使用Figma做设计&#xff1f;其实Figma现在除了给用户带来的丝滑的操作体验…

KT148A语音芯片的下载用的是串口,测试可以直接串口发指令控制吗

一、问题简介 KT148A语音芯片的下载用的是串口&#xff0c;那我实际测试是不是可以直接串口发指令测试控制&#xff1f;就不用单独写程序去模拟一线串口的时序了 详细描述 首先看一下KT148A芯片的参考设计原理图&#xff1a;其中芯片的2脚和3脚就是串口&#xff0c;注意下载语…

跨国企业在数据跨境传输中应该知道的五大要点

随着全球化的加速和数字化经济的蓬勃发展&#xff0c;数据跨境传输已经成为跨国企业日常业务运营中的重要环节。然而&#xff0c;在数据跨境传输过程中&#xff0c;企业需要关注一系列问题&#xff0c;以确保遵守法律法规、保障数据安全、提高传输效率并降低风险。本文将探讨数…

Office LTSC 2021 v16.80

Office 2021 for Mac是一款针对Mac用户推出的办公软件套装&#xff0c;包括了Word、Excel、PowerPoint、Outlook等常用的办公软件。相比于之前的版本&#xff0c;Office 2021 for Mac也进行了一些更新和改进&#xff0c;以提高用户的使用体验和效率。 以下是Office 2021 for M…

Python使用Mechanize库完成自动化爬虫程序

Mechanize是一个Python第三方库&#xff0c;它可以模拟浏览器的行为&#xff0c;实现自动化的网页访问、表单填写、提交等操作。下面是一个使用Mechanize库编写的爬虫的例子&#xff0c;它可以爬取百度搜索结果页面的标题和链接&#xff1a; import mechanize from bs4 import …

宝马所有发动机号码的位置以及型号说明

每个汽车制造商都会为自己生产的汽车底盘和发动机分配一个内部代码&#xff0c;以标识研发和生产项目&#xff0c;而宝马对这些底盘代码和发动机代码更是规划的井井有条&#xff0c;比如发动机有M、N、B、S、P或W等代码标识&#xff0c;而底盘和车身则有E、F、G或i等代码标识。…

Nginx 版本信息泄露解决方案

Nginx 【CVE-2021-23017;CVE-2022-41742】 【影响】 攻击者可能使用泄露的版本信息来确定该版本服务器有哪些安全漏洞&#xff0c;据此展开进一步的攻击。以下是百度的请求示例&#xff0c;也是有版本泄露&#xff1a; 【解决方案】 在Server节点增加以下配置&#xff1a; #…

3.4 Linux 软件管理

一. RPM 软件包管理器 1、软件包介绍 RPM&#xff08;RedHat Package Manager&#xff09;软件包&#xff1a;扩展名为“.rpm”。RPM本质上就是一个包&#xff0c;包含可以立即在特定机器体系结构上安装和运行的Linux软件。安装RPM软件包需要使用rpm命令或yum命令。 源代码软…

vue3中父子组件传值

学习参考地址&#xff1a;【精选】Vue3父子组件间传参通信_vue3父子组件传参-CSDN博客 1、父传子 父组件直接通过属性绑定的方式给子组件绑定数据&#xff0c;子组件通过defineProps接收函数接收&#xff0c;例如&#xff1a; 父组件中&#xff1a; 子组件中接收props&#…

Leetcode1334. 阈值距离内邻居最少的城市

Every day a Leetcode 题目来源&#xff1a;1334. 阈值距离内邻居最少的城市 解法1&#xff1a;Floyd 算法 使用 Floyd 算法得到任意两点之间的最短路&#xff0c;然后统计每一个节点满足条件&#xff08;距离在 distanceThreshold 以内&#xff09;的邻居数量。 代码&…

Mysql词法分析实验(二)

表名叫select123能不能创建一个表&#xff1f; 在 MySQL 中&#xff0c;可以创建一个名为 select123 的表&#xff0c;但由于 SELECT 是 MySQL 的一个保留关键字&#xff0c;通常建议避免使用它作为表名的一部分&#xff0c;以防止潜在的解析错误或混淆。如果确实需要使用这样…

带头双向循环链表的实现

带头双向循环链表的实现 文章目录 带头双向循环链表的实现一、模型构建二、代码实现&#xff08;接口函数以及测试用例&#xff09;①初始化 Create函数②尾插③尾删④头插⑤头删⑥查找⑦在pos位置前插入新尾插新头插 ⑧删除pos位新尾删新头删 ⑨销毁链表⑩打印链表⑪测试用例…

SAP Debug时如何跳过(不执行)某些代码

Debug时如何跳过(不执行)某些代码 在DEBUG界面, 首先将光标定位到想跳至的代码行, 然后从右键菜单中选择Goto Statement, 或者从Debugger菜单中选择Goto Statement:&#xff08;效果相同&#xff09; 然后光标就会定位到想跳至的代码行 执行结果如下: 结果是000的原因是&#…

保姆级前端翻牌效果(CSS)

效果 翻牌效果 hover 时候 代码直接上 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document<…

微服务的注册发现和微服务架构下的负载均衡

文章目录 微服务注册模型服务注册与发现怎么保证高可用【1. 服务端崩溃检测】【2. 客户端容错】【3. 注册中心选型】 微服务架构下的负载均衡【1.轮询与加权轮询】【2.随机与加权随机】【3.哈希与一致性哈希】【4.最少连接数】【5.最少活跃数】【6.最快响应时间】【总结】 负载…