<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
ECharts是一個由百度開發的開源資料視覺化工具,能夠提供直觀,生動,可互動,可高度個性化客製化的資料視覺化圖表。
本專案基於echarts 2.0版本和jquery-3.4.0版本,可實現點選“開始”按鈕,會顯示兩條動態曲線;點選“停止”按鈕,曲線清空
專案效果如下圖所示:
廢話不多說,直接上程式碼
<div id="current_A" style="width: 600px;height:400px;margin-bottom: 100px"></div> <div class="button_group"> <input class="button" type="button" value="開始" id="start" style="margin:0 50px 0"> <input class="button" type="button" value="停止" id="stop" style="margin:0 50px 0"> </div>
這部分比較簡單,第一個div用於存放曲線圖,第二個div用於存放兩個按鈕。
這部分其實我主要是想儲存一個好看的按鈕樣式…
.button_group{ position: fixed; top:400px; left: 6% } .button{ width: 90px; height: 35px; border-width: 0px; border-radius: 3px; background: #1E90FF; cursor: pointer; outline: none; font-family: Microsoft YaHei; color: white; font-size: 15px; }
$(function () { // 初始化圖表的資料輸入陣列 var data_real = []; var data_pre = []; var data_length = 30; for (i=0;i<data_length;i++){ data_pre.push(15000); data_real.push(15000); } //初始化全域性變數 var global_status = 0;//載入頁面時預設為0 //每個div分別建立一個form物件 var CurrentA = new My_form("current_A"); //頁面載入時初始化靜態圖表 CurrentA.init_static() //定義form類 function My_form(element_id){ //form類所建立在指定的div的id this.element_id = element_id //初始化圖表,在具體指定元素位置建立圖表,並傳入資料列表 this.init_static = function(){ this.mychart = echarts.init(document.getElementById(this.element_id)); // 初始化x軸資料 var _x_axis = []; for (var i = 0; i < data_length; i++) { _x_axis.push(i) } // 初始化y軸資料 var real_arr = []; var model_arr = []; for (var i = 0; i < data_length; i++) { real_arr.push(15000); model_arr.push(15000); } //設定圖示設定項 this.mychart.setOption({ title: { text: "某工業過程電流變化曲線", x:'left', textStyle: { "fontSize": 16 } }, tooltip: { trigger: 'axis' }, // 調整圖表在div中的大小 grid:{ top:"35px", left:"50px", right:"10px", bottom:"50px" }, legend: { data: ['real', 'model'], textStyle:{ fontSize: getDpr() }, x:'center' }, toolbox: { show: true, feature: { mark: {show: true}, dataView: {show: true, readOnly: false}, magicType: {show: true, type: ['line']}, saveAsImage: {show: true} } }, calculable: true, xAxis: { type: 'category', boundaryGap: false, data: _x_axis }, yAxis: { type: 'value', min:12000, max:18000, splitNumber:3 }, series: [{ name: '真實值', type: 'line', color: "red", data: real_arr }, { name: '模型預估值', type: 'line', color: "green", data: model_arr }] }) } // 更新資料函數 this.update_data = function(real_data,model_data){ this.mychart.setOption({ title: { text: "某工業過程電流變化曲線", x:'left', textStyle: { "fontSize": 16 } }, series: [{ name: '真實值', data: real_data }, { name: '模型預估值', data: model_data }] }); } } //「開始實驗」按鈕點選事件 $("input[id='start']").click(function(){ global_status = 1; }) //「終止實驗」按鈕點選事件 $("input[id='stop']").click(function () { global_status =0; data_real.fill(15000); data_pre.fill(15000); CurrentA.init_static() }) //legend字型大小 function getDpr() { var windowWidth = $(window).width(); if (windowWidth < 1920) { return 12 } if (windowWidth >= 1920 && windowWidth <= 3840) { return 18 } if (windowWidth > 3840 && windowWidth <= 5760) { return 30 } }; // 更新真實值 function update_real(shift=true) { var real_num = (Math.random()-0.5)*2000+15000; data_real.push( real_num ); if (shift) { data_real.shift(); } } // 更新模型值 function update_pre (shift=true) { var pre_num = (Math.random()-0.5)*2000+15000; data_pre.push( pre_num ); if (shift) { data_pre.shift(); } } //計算均方誤差 function junfang_error(arr1,arr2){ var len=arr1.length; var sum=0; for(var i=0;i<len;i++){ sum+=Math.pow(arr1[i]-arr2[i],2) } var ans = Math.sqrt(sum/len); return ans.toFixed(2); } //計算平均絕對誤差百分比 function pingjun_error(arr_real,arr_model){ var len=arr_real.length; var sum=0; for(var i=0;i<len;i++){ sum+= Math.abs(arr_real[i]-arr_model[i]) / arr_real[i] } var ans = sum/len*100; return ans.toFixed(2)+"%" } //設定監聽函數每一秒一次 setInterval(function () { if(global_status===0){ return; } update_pre(); update_real(); CurrentA.update_data(data_real,data_pre) },1000) })
每個部分的功能我都寫在註釋中了,注意HTML中的div對應的id和form類中傳入的引數應保持一致。
真實值和模型值的更新,這裡我用亂數取締了,有需要的話可以根據自己實際需求繫結相應的資料來源。
曲線的條數這裡我用兩條為例,如果一條或者三條及以上的情況,大家可以自己檢視程式碼進行相應調整,難度應該不是很大。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45