echarts 时间曲线图_制作按时间每秒实时更新的echarts折线图

有时候我们的图表需要根据后台数据每秒实时更新,那么用echarts应该如何实现呢?2020.11.27发现篇文章很多人关注,但之前写的不是很清楚,今天更新下,大家有问题可以也留言讨论。这是一个仿win10任务管理器的设备信息监控。

首先看示例:

图中的折线会每秒向右滚动。

思路:

1.首先这是个echarts的折线图,例如显示60s数据,我们需要先初始化一个包含60条数据data数组。

// 每秒更新数据,图标共显示60s数据,所以要第一次渲染初始化60条数据

var data = [];

var now = +new Date();

var oneDay = 1000;

function randomData() {

now = new Date(+now + oneDay);

value = Math.random() * 100;

var valueName = now.getFullYear() + '/' + (now.getMonth() + 1) + '/' + now.getDate() +

' ' + (now.getHours() >= 10 ? now.getHours() : '0' + now.getHours()) + ':' +

(now.getMinutes() >= 10 ? now.getMinutes() : '0' + now.getMinutes()) +

':' + (now.getSeconds() >= 10 ? now.getSeconds() : '0' + now.getSeconds());

return {

name: now.toString(),

value: [

valueName,

Math.round(value)

]

}

}

var value = Math.random() * 1000;

for (var i = 0; i < 60; i++) {

data.push(randomData());

}

// 模拟数据完毕

2.折线图每秒更新,我们要实现这个效果需要每秒刷新一次数据和折线图

理清楚思路就简单了。

上代码:

function initEchars() {

console.log("初始化执行-initEchars");

var self = this;

// 初始化echarts

var myChart1 = echarts.init(document.getElementById("chart1"));

// 模拟数据开始

// 每秒更新数据,图标共显示60s数据,所以要第一次渲染初始化60条数据

var data = [];

var now = +new Date();

var oneDay = 1000;

function randomData() {

now = new Date(+now + oneDay);

value = Math.random() * 100;

var valueName = now.getFullYear() + '/' + (now.getMonth() + 1) + '/' + now.getDate() +

' ' + (now.getHours() >= 10 ? now.getHours() : '0' + now.getHours()) + ':' +

(now.getMinutes() >= 10 ? now.getMinutes() : '0' + now.getMinutes()) +

':' + (now.getSeconds() >= 10 ? now.getSeconds() : '0' + now.getSeconds());

return {

name: now.toString(),

value: [

valueName,

Math.round(value)

]

}

}

var value = Math.random() * 1000;

for (var i = 0; i < 60; i++) {

data.push(randomData());

}

// 模拟数据完毕

// 使用定时器每秒更新数据

self.intervalId = setInterval(function() {

//模拟获取数据异步请求,模拟数据更新

let item = randomData()

if (data.length < 60) {

data.push(item);

} else {

data.shift();

data.push(item);

}

console.log(data)

// 更新数据后push进data数据

let option1 = {

tooltip: {

trigger: 'axis',

formatter: function(params) {

params = params[0];

var date = new Date(params.name);

return date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear() + ' : ' + params.value[1];

},

axisPointer: {

animation: false

}

},

grid: {

x: 35,

y: 35,

x2: 35,

y2: 35

},

xAxis: {

type: 'time',

splitNumber: 30,

axisLine: {

show: false

},

axisTick: {

show: false

},

axisLabel: {

show: true

},

splitLine: {

lineStyle: {

color: '#d9eaf4'

}

},

minorSplitLine: {

show: true,

lineStyle: {

color: '#117dbb'

}

},

triggerEvent: true

},

yAxis: {

type: 'value',

boundaryGap: [0, '100%'],

// max:100,

axisLine: {

show: false

},

axisTick: {

show: false

},

axisLabel: {

show: true

},

splitLine: {

lineStyle: {

color: '#d9eaf4'

}

},

minorSplitLine: {

show: true,

lineStyle: {

color: '#117dbb'

}

}

},

series: [{

name: '模拟数据',

type: 'line',

showSymbol: false,

hoverAnimation: false,

areaStyle: {

normal: {

//颜色渐变函数 前四个参数分别表示四个位置依次为左、下、右、上

color: "#f1f6fa" //背景渐变色

// lineStyle: { // 系列级个性化折线样式

// width: 3,

// type: 'solid',

// color: "#0edef7"

// }

}

},

itemStyle: {

normal: {

color: "#4a9ccb", //折线点的颜色

lineStyle: {

color: "#4a9ccb", //折线的颜色

width: 1,

}

}

},

markPoint: {

data: [

[{

symbol: 'none',

x: '95%',

yAxis: data[data.length - 1].value[1]

}, {

symbol: 'circle',

label: {

normal: {

position: 'start',

formatter: '实时数据\n{c}'

}

},

name: '实时数据',

value: data[data.length - 1].value[1],

xAxis: data[data.length - 1].value[0],

yAxis: data[data.length - 1].value[1]

}]

]

},

data: data

}]

};

// 更新echarts图表

myChart1.setOption(option1, true);

}, 1000);

},

这次写了很多注释😄相信可读性提高了不少哈哈

大家可以根据自己需要,再按需做调整!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux lua socket编程,CentOs 安装lua,luasocket

一、centos安装Lua3)个人在这里选择使用5.1版本的*下载wget http://www.lua.org/ftp/lua-5.1.5.tar.gz--2013-10-14 16:23:17-- http://www.lua.org/ftp/lua-5.1.5.tar.gzResolving www.lua.org... 89.238.129.35, 2a02:40:41::5Connecting to www.lua.org|89.238.129.35|:80.…

Python 2.7 Tutorial —— 流程控制

.. _tut-morecontrol: ****************************************** More Control Flow Tools 深入流程控制 ****************************************** Besides the :keyword:while statement just introduced, Python knows the usual control flow statements known from …

一厕难求!NASA悬赏三万五千美元,只为一个能在月球上用的马桶

全世界只有3.14 % 的人关注了爆炸吧知识来源&#xff1a;大数据文摘作者&#xff1a;刘俊寰如今逐渐步入智能生活时代&#xff0c;智能化产品也逐渐普及到我们生活中&#xff0c;有的智能马桶&#xff0c;不仅可以识别大便监测你的生活状况&#xff0c;还可以识别肛纹辨别不同身…

我很高兴地宣布我正在编写第一本官方ABP图书

掌握ABP框架通过实施软件开发最佳实践来构建可维护的 .NET 解决方案从 ABP 框架的创建者那里学习如何构建现代 Web 应用程序主要特点使用 ABP 中的最佳工具构建强大、可维护和可扩展的软件解决方案了解如何在您的 Web 应用程序中实施 SOLID 原则和领域驱动设计了解 ABP 框架如何…

python join_python join 和 split的常用使用方法

python join 和 split的常用使用方法 python join 和 split方法的使用,join用来连接字符串&#xff0c;split恰好相反&#xff0c;拆分字符串的。 1.join用法示例 >>>li [my,name,is,bob] >>> .join(li) my name is bob >>>_.join(li) my_name_is_…

layui 如何去dom_javascript 怎么去引用layui里面的方法

现在&#xff0c;我有一个JSP页面&#xff0c;里面同时存在普通javascript的代码和layui的代码&#xff0c;我想调用layui里面的方法&#xff0c;该怎么引用&#xff1f;这是javascript代码&#xff1a;var treeSetting {data: {simpleData: {enable: true,idKey: "id&qu…

ExtJs Grid分页时序号自增的实现,以及查询以后的序号的处理

ExtJs Grid分页时&#xff0c;默认情况下每页的序号都是从1起始的&#xff0c;这往往不符合我们的习惯。这里实现了序号的自动增加。如&#xff1a;每页20条第一页从1开始&#xff0c;第二页从21条开始。先定义一个全局变量如record_start 0,这里记得赋初始值主要是考虑第一次…

linux的自定义input,linux键值到Android键值的转换与自定义

首先要确定按键输入设备是对应/dev/input目录下哪个event&#xff0c;根据VID PID匹配对应的kl文件&#xff0c;可通过如下命令 cat /proc/bus/input/devices 查看设备信息framework层通过.kl文件将获取的键值转换成实际按键含义后&#xff0c;又会通过KeycodeLabel转换成相应的…

原来历史人物的英文名竟然叫这些,太好笑了吧哈哈哈哈哈

全世界只有3.14 % 的人关注了爆炸吧知识我们学了这么多年的英语你有英文名字吗&#xff1f;如果有一天&#xff0c;古人穿越到了现在那么他们的英文名字是……汉武帝&#xff1a;Woody汉文帝&#xff1a;Wendy▽朱棣&#xff1a;judy▽朱熹&#xff1a;Juicy▽周瑜&#xff1a;…

10款优秀的跨平台免费生产力软件[转]

因为多数人并不需要OpenOffice.org那样整合了字处理、表格、幻灯片制作等完整的生产力工具&#xff0c;他们只需要其中一项功能&#xff1a;字处理软件AbiWord 2.8.6&#xff1b;开源桌面排版系统Scribus 1.3.8&#xff1b;整合浏览器、电子邮件、IRC和HTML编辑器的SeaMonkey 2…

From Apprentice To Artisan 翻译 19

为什么80%的码农都做不了架构师&#xff1f;>>> 上一篇 Interface Segregation Principle 接口隔离原则 Introduction 介绍 The Interface Segregation principle states that no implementation of an interface should be forced to depend on methods it does n…

Winform模拟post请求和get请求登录网站

引言最近有朋友问如何用winform模拟post请求&#xff0c;然后登录网站&#xff0c;稍微想了一下&#xff0c;大致就是对http报文的相关信息的封装&#xff0c;然后请求网站登录地址的样子。发现自己的博客中对这部分只是也没总结&#xff0c;就借着这股风&#xff0c;总结一下h…

python eval函数_Python eval 函数妙用

作者博文地址&#xff1a;https://www.cnblogs.com/liu-shuai/ eval 功能&#xff1a;将字符串str当成有效的表达式来求值并返回计算结果。 语法&#xff1a; eval(source[, globals[, locals]]) -> value 参数&#xff1a; source&#xff1a;一个Python表达式或函数compil…

易宝支付碰到 交易签名无效问题

今天在易宝支付问题上给纠结了半天&#xff0c;将模块加进文件中&#xff0c;设置好商户ID与密钥&#xff0c;加上对应的域名&#xff0c;是可以实现在线支付问题。但我现在要的功能是要按不同的分组&#xff0c;去读取不同的商户ID与密钥&#xff0c;因些&#xff0c;我将这些…

那些上海滩的金融传奇,或许都开始于一份PPT

全世界只有3.14 % 的人关注了爆炸吧知识 我从07年开始在上海做商务PPT定制&#xff0c;从工作室一步一步到国内首家PPT定制公司&#xff0c;从电脑前到讲台前做培训&#xff0c;算是见证了中国PPT行业的发展。在我大大小小做过的项目里&#xff0c;印象最深的莫过于“靠PPT拿下…

Android 控件之RatingBar评分条

RatingBar是Adnroid中的评分条。效果挺得的 源码下载 一、概述 RatingBar是SeekBar和ProgressBar的扩展&#xff0c;用星星来评级。使用的默认大小RatingBar时&#xff0c;用户可以触摸/拖动或使用键来设置评分&#xff0c;它有俩种样式&#xff08;大、小&#xff09;&#xf…

c语言字符比较思路,C语言讲解思路资料

《C语言讲解思路资料》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《C语言讲解思路资料(10页珍藏版)》请在人人文库网上搜索。1、C语言讲解思路1,认识C语言的组成: #in elude main ()printf(Hello, worldn);构成&#xff1a;包含预定义文件、函数体、主函数 一个C程…

3d目标检测_CVPR 2020 |基用于3D目标检测的层级图网络

论文&#xff1a;A Hierarchical Graph Network for 3D Object Detection on Point Clouds论文地址&#xff1a;https://www.aminer.cn/pub/5eccb534e06a4c1b26a834c7?confcvpr2020由于大多数现有的点云对象检测方法不能充分适应点云的特征(例如稀疏性)&#xff0c;所以一些关…

C# datagridview、datagrid、GridControl增加行号

01—WinForm中datagridview增加行号在界面上拖一个控件dataGridView1&#xff0c;在datagridview添加行事件中添加如下代码&#xff1a;private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e){try{for (int i 0; i < dataGridView1.Rows…

position定位 响应式_使用 Vue3 实现双盒子定位 Overlay

之前说过&#xff0c;使用 可以很优雅的把某个组件渲染到根节点之外的节点&#xff0c;同时使其渲染的内容不丧失响应式和对应的生命周期函数调用。那么基于此&#xff0c;用 实现相对于某一元素的 Overlay 。实际上&#xff0c;这篇文章跟 Vue3 的关系不大&#xff0c;只是通…