Echarts实现自定义图标——风向图

2023-05-16

在这里插入图片描述
上图用了两种模式表示风向图,第一种是自定义系列,第二种使用了折线图,给折线图添加自定义图标。
两者的区别在于给options.series设置不同的type值,如下图:
在这里插入图片描述
那么我们来一步步实现代码,先创建一个HTML文件,引入echarts.js

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.bootcdn.net/ajax/libs/echarts/4.0.4/echarts.min.js"></script>
	</head>
	<body>
		<div id="my-echarts" style="width: 1500px;height:1000px;margin-top: 60px;"></div>
	</body>
</html>

接着在script标签里面写代码

		//初始化实例对象
		let myChart = echarts.init(document.querySelector('#my-echarts'));
		
		//定义一个风向的数据用来做自定义数据,windDirection字段表示风向
		let windDirectionData = [{
				time: "2017-06-27T11:00:00.000Z",
				windDirection: 0,
			},
			{
				time: "2017-06-27T12:30:00.000Z",
				windDirection: 1,
			},
			{
				time: "2017-06-27T14:00:00.000Z",
				windDirection: 122,
			},
			{
				time: "2017-06-27T15:30:00.000Z",
				windDirection: 45,
			},
			{
				time: "2017-06-27T17:00:00.000Z",
				windDirection: 60,
			},
			{
				time: "2017-06-27T18:30:00.000Z",
				windDirection: 70,
			},
			{
				time: "2017-06-27T20:00:00.000Z",
				windDirection: 80,
			},
			{
				time: "2017-06-27T21:30:00.000Z",
				windDirection: 90,
			},
			{
				time: "2017-06-27T23:00:00.000Z",
				windDirection: 120,
			},
			{
				time: "2017-06-28T00:30:00.000Z",
				windDirection: 121,
			},
			{
				time: "2017-06-28T02:00:00.000Z",
				windDirection: 122,
			},
			{
				time: "2017-06-28T03:30:00.000Z",
				windDirection: 123,
			},
			{
				time: "2017-06-28T05:00:00.000Z",
				windDirection: 124,
			},
			{
				time: "2017-06-28T06:30:00.000Z",
				windDirection: 105,
			},
			{
				time: "2017-06-28T08:00:00.000Z",
				windDirection: 95,
			},
			{
				time: "2017-06-28T09:30:00.000Z",
				windDirection: 85,
			},
			{
				time: "2017-06-28T11:00:00.000Z",
				windDirection: 85,
			},
			{
				time: "2017-06-28T12:30:00.000Z",
				windDirection: 85,
			},
			{
				time: "2017-06-28T14:00:00.000Z",
				windDirection: 59,
			},
			{
				time: "2017-06-28T15:30:00.000Z",
				windDirection: 105,
			},
			{
				time: "2017-06-28T17:00:00.000Z",
				windDirection: 115,
			},
			{
				time: "2017-06-28T18:30:00.000Z",
				windDirection: 152,
			},
			{
				time: "2017-06-28T20:00:00.000Z",
				windDirection: 300,
			},
			{
				time: "2017-06-28T21:30:00.000Z",
				windDirection: 213,
			},
		]
		//再定义一个数据,用来给折线图做数据使用
		const winddirs = ["0", "20", "40", "80", "66", "102", "33", "110", "112", "120", "120", "129", "120", "160", "156",
			"136", "126", "115", "126", "46", "76", "78", "27", "119"
		]
		
		//循环windDirectionData新增一个winddir字段,winddir是用来渲染自定义图标旋转弧度的,这里不能使用12,26,300这样的旋转角度值,
		//必须要把服务器返回的角度值转化为弧度值才可以使图标旋转到正确的角度。
		const timeArr = [] //用来做x轴的数据
		windDirectionData.forEach(val=> {
			val['winddir'] = (-Math.PI / 180) * val.windDirection; //自定义图标旋转的弧度值
			timeArr.push(echarts.format.formatTime(
				'hh:mm',
				val.time
			))
		})
		//处理下自定义图标的数据,可以看到,自定义图标生成了一个数组,我们把数组的第一项:180,固定写死,那么我们的自定义
		//图标就会在y轴对应的180值位置,排成一排,这个值可以随便改,根据自己的需求来,数组的第二项winddir字段是我们要渲染
		//的图标旋转弧度值,第三项windDirection是我们在图表展示的提示信息。
		const customData = windDirectionData.map(function(entry, index) {
			return [index, 180, entry.winddir, entry.windDirection];
		});

		const arrowSize = 18; //定义下图标的大小
		//写一个函数处理自定义图标的数据
		const renderArrow = function(param, api) {
			const point = api.coord([api.value(0), api.value(1)]); //这里表示自定义图标在坐标系里面的位置,包含y,x轴
			//我这里使用path,svg图标,大家可以自由搭配,svg图标从阿里图标库里面下载的。
			return {
				type: 'path',
				shape: {
					pathData: 'M688.64 995.2H341.12a53.12 53.12 0 0 1-53.12-52.48V520.96H45.44a32 32 0 0 1-30.08-21.12 30.72 30.72 0 0 1 8.32-35.2L512 21.76a32 32 0 0 1 44.16 0l442.88 442.24a33.92 33.92 0 0 1 7.04 35.84 32 32 0 0 1-30.08 19.84h-215.68v402.56a71.68 71.68 0 0 1-71.68 72.96z m-336-64h336a7.04 7.04 0 0 0 7.04-7.04V488.32a32 32 0 0 1 32.64-32h172.16L535.04 90.88 128 456.32h192a32 32 0 0 1 32.64 32z',
					x: -arrowSize / 2,
					y: -arrowSize / 2,
					width: arrowSize,
					height: arrowSize
				},				
				//这里调用echarts内部方法生成图标旋转角度,
				//具体参考:https://echarts.apache.org/zh/option.html#series-custom.renderItem
				rotation: api.value(2), 
				position: point, //在图表里面的坐标
				style: {
					stroke: '#55aaff',
					lineWidth: 1
				}
			};
		};
		let option = {
			title: {
				text: "风向图",
				left: 'center',
				textStyle: {
					color: '#000',
					fontSize: 24,
				},
			},
			color: ["#3399FF", "#7BB31A", "#00FFFF", "#FF4C3B"],
			grid: {
				show: true,
				top: '5%',
				bottom: '19%',
				left: '6%',
				right: '4%'
			},
			legend: { //系列标记
				show: true,
				top: '20px',
				zlevel: 2,
				right: '30px',
			},
			tooltip: {
				trigger: 'axis',
				formatter: function(params) {
					return [
						params[0].axisValue,
						'风向:' + params[0].data[3] + '°',
					].join('<br>');
				}
			},
			xAxis: {
				type: "category",
				name: "(h)",
				boundaryGap: true, //默认,坐标轴留白策略
				axisLine: {
					show: false
				},
				splitLine: {
					show: false
				},
				axisTick: {
					show: false,
					alignWithLabel: true
				},
				data: timeArr
			},
			yAxis: {
				axisLine: {
					show: false
				},
				splitLine: {
					show: true,
					lineStyle: {
						type: 'dashed',
						color: 'rgba(33,148,246,0.2)'
					}
				},
				max: 200,
				axisTick: {
					show: false
				},
			},
			series: [{
					name: '风向1',
					type: 'custom',
					renderItem: renderArrow,
					data: customData,
					z: 10
				},
				{
					name: '风向2',
					type: 'line',
					symbol: 'circle',
					symbolSize: 7,
					data: getWindSeries(winddirs),
				}
			]
		};
		function getWindSeries(winddirs) {
			//这里是给折线图加上自定义的风向图标
			let windSeries = [];
			for (let i = 0; i < winddirs.length; i++) {
				windSeries.push({
					value: parseFloat(winddirs[i]),
					symbol: 'path://M688.64 995.2H341.12a53.12 53.12 0 0 1-53.12-52.48V520.96H45.44a32 32 0 0 1-30.08-21.12 30.72 30.72 0 0 1 8.32-35.2L512 21.76a32 32 0 0 1 44.16 0l442.88 442.24a33.92 33.92 0 0 1 7.04 35.84 32 32 0 0 1-30.08 19.84h-215.68v402.56a71.68 71.68 0 0 1-71.68 72.96z m-336-64h336a7.04 7.04 0 0 0 7.04-7.04V488.32a32 32 0 0 1 32.64-32h172.16L535.04 90.88 128 456.32h192a32 32 0 0 1 32.64 32z',
					symbolSize: 18,
					symbolRotate: -parseFloat(winddirs[i]),
					itemStyle: {
						color: '#f00'
					}
				});
			}
			return windSeries;
		}
		myChart.setOption(option);
		
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Echarts实现自定义图标——风向图 的相关文章

  • ubuntu系统下载地址

    ubuntu官方下载地址 http releases ubuntu com ubuntu国内常用地址 xff1a http mirrors ustc edu cn ubuntu releases Windows官方下载地址 https ww
  • 学习笔记必备软件:OneNote+ Mindmaster完美搭配使用

    做笔记有两个关键点 xff1a 一是笔记内容详略得当 二是知识的框架清晰完整 为什么这样说 xff1f 举个例子 xff0c 如图是我的笔记界面 xff0c 用的是免费的OneNote xff0c OneNote是微软出的笔记软件 xff0
  • 高中生的高效学习法之“纵横术”

    考试的时候 xff0c 你或许遇经常遇到这种情况 xff1a 面对考试题 xff0c 你冥思苦想这个题是哪一章的知识点 xff0c 到底想要考什么 xff1f 或许你知道这个题考的是什么 xff0c 但是由于你对这部分知识掌握不牢而导致还是
  • 学习必备软件:OneNote+Mindmaster完美结合(精彩内容持续更新中…….)

    一 为什么做笔记 xff1f 做笔记应该注意哪些方面 xff1f 1 为什么做笔记 xff1f 做笔记的意义体现在以下几个方面 xff1a xff08 1 xff09 抵抗忘记 根据艾宾浩斯遗忘曲线 xff0c 前一天记住的信息 xff0c
  • 关于数学建模(或科研论文)的画图学习建议

    对于数学建模画图来说 xff0c PPT xff0c visio matlab就够用了 xff0c 其他根据特点备选 首先搞清楚 xff0c 我们需要画的图主要分为两种 xff1a 一是 示意图 xff0c 主要是用于表达思路 xff0c
  • Linux 网桥配置br-lan、eth0、eth1、ra0、rai0

    Linux网关模式下将有线LAN和无线LAN共享网段实现局域网内互联 思路其实很简单 xff1a 就是将虚拟出一个bridge口 xff0c 将对应的有线LAN和无线LAN都绑定在这个虚拟bridge口上 xff0c 并给这个bridge口
  • 用java -jar 命令执行架包时出现了Invalid or corrupt jarfile xxxx.jar

    将一个 java文件打包 jar后 xff0c 需要在META INF目录下的MANIFEST ME中添加Main Class选项 使用命令java jar xxxx jar后出现了Invalid or corrupt jarfile xx
  • 如何用Stata完成(shui)一篇经济学论文(三):基本命令

    目录 变量的生成 gen与egen区别 xff09 变量的删除变量的更改 在开始正式学习前 xff0c 有一个小建议 xff0c 希望大家养成在do file里写代码的习惯 xff0c 主要是方便保存已经写过的代码 xff0c 因为Stat
  • 阿里云服务器ECS入门题库

    Apsara Clouder云计算专项技能认证 xff1a 云服务器ECS入门题库 题库一多选题题库二多选题题库三多选题 保证及格 xff0c 不保证100分 xff01 xff01 xff01 保证及格 xff0c 不保证100分 xff
  • mysql 设置大小写不敏感

    一 原理与参数 mysql大小写敏感配置与两个参数相关 lower case file system 和 lower case table names 查看当前mysql的大小写敏感配置 show global variables like
  • mysql字符集查看与设置

    一 查看 MySQL 字符集 以下命令 Windows amp Linux通用 1 服务器和数据库 mysql gt show variables like 39 char 39 43 43 43 Variable name Value 4
  • WindTerm使用(暂停更新)

    作为一个经常和代码以及服务器打交道的人 xff0c 连接远程服务器所使用的工具肯定是越方便越好 目前 xff0c 我使用的是xshell5和MobaXterm两个 Xshell最新的是7 xff0c 破解版的我懒得去找 xff0c 那xsh
  • 彻底解决[未识别的网络][公共网络]的问题

    未识别的网络 导致网络变成 未知网络 或 公共网络 会造成一系列问题 比如防火墙的一些端口会挡在公共之外 等等 不细说 那么要如何把 未知网络 公用网络 怎么改变为 家庭 和 工作网络 网络的回答比如 百度问题上的回答都是无脑的回答 不可能
  • centos7安装Docker详细步骤(无坑版教程)

    一 安装前必读 在安装 Docker 之前 xff0c 先说一下配置 xff0c 我这里是Centos7 Linux 内核 xff1a 官方建议 3 10 以上 xff0c 3 8以上貌似也可 注意 xff1a 本文的命令使用的是 root
  • windows通过xrdp实现远程ubuntu

    首先声明 xff1a 我使用的是root用户 xff0c 所以无视权限问题 第一步 安装vncserver wget http www c nergy be downloads tigervncserver 1 6 80 4 amd64 z
  • 【Vue2+Vue3】开发指令使用总结,未完待续

    目录 一 watch监听及深度监听 二 directive自定义指令详解 43 实例 三 1 vue父子组件 xff1a 数据双向绑定 一 数据双向绑定 sync xff08 支持多个双向绑定值 xff09 三 2 父子组件间方法的调用 1
  • 南京大学数字电路与计算机组成实验的Verilator仿真(二)

    实验二 1 2 4译码器 top v module span class token function decode24 span span class token punctuation span x span class token p
  • firefox 的cookie 存放在哪里?

    在地址栏输入about surpport 打开配置页 找到about profiles 点击打开 看到有两个目录项 看准正在使用的那一个 34 正在使用此配置文件 34 找到cookie sqlite 的位置 正在使用的那个配置是删不掉的
  • C++ 构造函数和New运算符

    算法和数据结构就是编程的一个重要部分 xff0c 你若失掉了算法和数据结构 xff0c 你就把一切都失掉了 系统会自动在栈中为每个变量开辟内存空间 xff0c 以保证数值被合理地存放 由于栈是系统自动分配的 xff0c 因此速度较快 xff
  • matlab函数interp2及其c++代码

    最近将一个matlab程序转为c 途中遇到interp2这个家伙 我是左查右查 发现网上没有人总结这个玩意 于是我来初探一下 还是别有洞天的 嘿嘿 1 关于interp2 nbsp nbsp Vq interp2 X Y V Xq Yq l

随机推荐

  • CentOS 7中利用Snapper快照进行系统备份与恢复

    为什么要使用Snapper快照 xff1f 我们可以想像以下场景 xff1a 1 场景一 xff1a 系统发生意外宕机 xff0c 工程师无法快速定位问题 xff0c 业务受到中断 xff0c 客户十分不满意 2 场景二 xff1a 项目会
  • 计蒜之道 作弊揭发者(测试赛)

    鉴于我市拥堵的交通状况 xff0c 市政交管部门经过听证决定在道路两侧安置自动停车收费系统 当车辆驶入车位 xff0c 系统会通过配有的摄像头拍摄车辆画面 xff0c 通过识别车牌上的数字 字母序列识别车牌 xff0c 通过连接车管所车辆信
  • 7-10 兔子繁衍问题

    7 10 兔子繁衍问题 xff08 15 分 xff09 一对兔子 xff0c 从出生后第3个月起每个月都生一对兔子 小兔子长到第3个月后每个月又生一对兔子 假如兔子都不死 xff0c 请问第1个月出生的一对兔子 xff0c 至少需要繁衍到
  • Ubuntu运行tkinter程序的部署

    软件部署 xff08 Ubuntu系统 xff09 1 安装python环境 前提需要有网 ubuntu会自带python xff0c 不用单独安装 xff0c 但python的pip工具和tkinter包需要安装 xff08 1 xff0
  • Linux-用shell脚本写一个进度条

    shell执行脚本 xff1a 创建一个 sh文件 xff0c 编辑文件即可执行脚本 Shell脚本中用 表示注释 xff0c 相当于c语言的 注释 但如果 位于第一行开头 xff0c 并且是则例外 xff0c 它表示该脚本使用后面指定的解
  • S3C2440裸机按键控制小灯

    1 环境 1 操作系统 xff1a win7 64位 2 集成开发环境 xff1a keil4 7 3 开发板 xff1a FL2440 4 下载器 xff1a Jlink V9 2 按键以及LED灯原理图 根据FL2440开发板原理图可知
  • 数组存邻接表

    模板 xff1a 数组表示邻接表 int top 61 0 向 点中存第top个边 int head MAX N 61 1 每个点在建立邻接表时 xff0c 栈顶的边的编号 边的结构体 struct Edge int v 另一端连接的点 i
  • windows远程桌面到Ubuntu

    环境 xff1a VMware 43 Ubuntu18 04 方案 xff1a xrdp 43 gnome ubuntu xff08 不要安装xubuntu xff0c 费力不讨好 xff09 自己分步安装有时会遇到配置困难 xff0c 建
  • 系列一、NotePad++离线安装NppFTP插件

    一 下载离线插件 链接 xff1a https pan baidu com s 16EEGYOTKkMP bB8LcnwpsQ pwd 61 yyds 提取码 xff1a yyds 二 解压自己NotePad 43 43 对应版本 xff0
  • Ubuntu18 AMD和ARM版本的源的区别

    Ubuntu18 AMD和ARM版本的源的区别 文章目录 Ubuntu18 AMD和ARM版本的源的区别AMD版本ARM版本主要区别 之前因为懒没有仔细研究ubuntu AMD和ARM版本系统apt源的区别 xff0c 导致今天换源时候走了
  • 【C51】基于C51单片机的定时闹钟(含代码,电路,拿走即可用)

    基于C51单片机的定时闹钟 上电后设置定时时间 xff0c 按键1选择设置的是小时分钟还是秒钟 按键2对其进行具体的数字设置 一次选择完成之后就默认进入计时模式 达到计时时间后响铃 按键3可以关闭响铃 代码 span class token
  • 解决Centos7.9图形界面root用户登录报“sorry, that didn‘t work please try again”问题

    一 问题描述 xff1a 新装的Centos7 9 在图形界面以root身份进行登录时报 sorry that didn t work please try again xff0c 如下图所示 xff1a 经确认 xff0c root密码是
  • ubuntu 安装QT 5.0出现错误:Failed to load platform plugin "xcb".

    当你安装QT 5 0 时 xff0c 启动的时候会出现如下错误 xff1a Failed to load platform plugin 34 xcb 34 Available platforms are linuxfb minimal x
  • 获取Android设备的序列号(SN号)

    方法 xff08 一 xff09 通过反射获取sn号 public static String getDeviceSN String serial 61 null try Class lt gt c 61 Class forName 34
  • Python smtplib.SMTP()和smtplib.SMTP_SSL() 登录邮箱并发送邮件比较

    一 邮件发送流程 邮件的发送是主动行为 xff1a 主要通过 MUA 邮件客户端软件 xff0c 将邮件内容发送给对应的服务器 暂存到投递服务区 xff0c 然后由当前运营商根据邮件特征信息将邮件转发给目标服务器的投递服 务区 xff0c
  • mysql limit 使用规范

    在我们使用查询语句的时候 xff0c 经常要返回前几条或者中间某几行数据 xff0c 这个时候怎么办呢 xff1f 不用担心 xff0c mysql 已经为我们提供了上面这样一个功能 xff08 0 xff09 mysql不支持select
  • 【Proteus仿真】【STM32单片机】智能电饭煲系统设计

    文章目录 一 功能简介二 软件设计三 实验现象联系作者 一 功能简介 本项目使用Proteus8仿真STM32单片机控制器 xff0c 使用继电器加热 保温模块 数码管模块 按键模块 LED指示灯 蜂鸣器模块等 主要功能 xff1a 系统运
  • Kurento-6.7.1 媒体服务器搭建详细教程(Kurento-Media-Server)

    Kurento 6 7 1 媒体服务器搭建详细教程 关于 Kurento 媒体服务器 Kurento 架构的核心是媒体服务器 xff0c 它被命名为Kurento媒体服务器 xff0c 即 KMS Kurento 媒体服务器所有的媒体处理模
  • 什么是jsp?

    什么是JSP JSP全称Java Server Pages xff0c 是一种动态网页开发技术 它使用JSP标签在HTML网页中插入Java代码 标签通常以 lt 开头以 gt 结束 JSP是一种Java servlet xff0c 主要用
  • Echarts实现自定义图标——风向图

    上图用了两种模式表示风向图 xff0c 第一种是自定义系列 xff0c 第二种使用了折线图 xff0c 给折线图添加自定义图标 两者的区别在于给options series设置不同的type值 xff0c 如下图 xff1a 那么我们来一步