echarts如何实现动态曲线图(多条曲线)

目录
  • echarts动态曲线图(多条曲线)
  • HTML部分
  • CSS部分
  • JS部分

echarts动态曲线图(多条曲线)

ECharts是一个由百度开发的开源数据可视化工具,能够提供直观,生动,可交互,可高度个性化定制的数据可视化图表。

本项目基于echarts 2.0版本和jquery-3.4.0版本,可实现点击“开始”按钮,会显示两条动态曲线;点击“停止”按钮,曲线清空

项目效果如下图所示:

废话不多说,直接上代码

HTML部分

<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用于存放两个按钮。

CSS部分

这部分其实我主要是想保存一个好看的按钮样式…

 .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;
  }

JS部分

$(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类中传入的参数应保持一致。

真实值和模型值的更新,这里我用随机数取缔了,有需要的话可以根据自己实际需求绑定相应的数据源。

曲线的条数这里我用两条为例,如果一条或者三条及以上的情况,大家可以自己查看代码进行相应调整,难度应该不是很大。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Echarts动态加载多条折线图的实现代码

    背景:动态加载多条折线图,折线图条数不确定 页面效果: 页面代码 //气象数据 function serchQx(beginTime, endTime, str, parameter) { $("#rr").html("");//将循环拼接的字符串插入下拉列表 var t = $("#imageParameter").val(); $ .ajax({ type : "POST", data : { "str"

  • Echarts实现多条折线可拖拽效果

    本文实例为大家分享了Echarts多条折线可拖拽的具体代码,供大家参考,具体内容如下 1.步骤: 1).封装Echarts折线图方法manyLineChart(),提取出公共的部分:     2).AJax获取后台数据传参至Echarts公共方法:     3).模拟后台获取的json数据:     4).给dayComment()方法值,开始执行. 2.效果: 3.代码: <!DOCTYPE html> <html> <head> <meta charset=&

  • echarts多条折线图动态分层的实现方法

    1.关于Echarts 大家可以到这个网址看一下,还是比较详细的. http://echarts.baidu.com/doc/example.html 这个功能还是很强大的,对于喜欢做数据统计来说是美味的. 2.echarts多条折线图动态分层 var xData = param.xData; var data = param.yData let option = []; let num =param.num ? param.num : 0; let max = num ? num *100 :

  • echarts如何实现动态曲线图(多条曲线)

    目录 echarts动态曲线图(多条曲线) HTML部分 CSS部分 JS部分 echarts动态曲线图(多条曲线) ECharts是一个由百度开发的开源数据可视化工具,能够提供直观,生动,可交互,可高度个性化定制的数据可视化图表. 本项目基于echarts 2.0版本和jquery-3.4.0版本,可实现点击“开始”按钮,会显示两条动态曲线:点击“停止”按钮,曲线清空 项目效果如下图所示: 废话不多说,直接上代码 HTML部分 <div id="current_A" style

  • C#动态绘制多条曲线的方法

    本文实例为大家分享了C#动态绘制多条曲线的具体代码,供大家参考,具体内容如下 实时绘制多条曲线,纵轴为数值,横轴为时间,精确到毫秒 实现效果如下: 代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Thr

  • Android LineChart绘制多条曲线的方法

    本文实例为大家分享了Android LineChart绘制多条曲线的具体代码,供大家参考,具体内容如下 目标效果: 1.新建custom_marker_view.xml页面作为点击弹出框的页面: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" andr

  • vue中echarts关系图动态增删节点以及连线方式

    目录 echarts关系图动态增删节点及连线 echarts关系图vue完整代码 echarts关系图动态增删节点及连线 首先,echarts的关系图有个非常坑的地方,就是节点的id必须连续,否则增删之后节点无法连接! 下面是简单的演示实现,实际要用动态增删的话,要复杂的多得多. 我是用的关系图是力引导图 更新后不会重新渲染,只是动态增加的效果 //假设你已经渲染了关系图 test() { let option = this.chart.getOption() //获取option配置项 //S

  • Android中使用AsyncTask实现下载文件动态更新进度条功能

    1. 泛型 AysncTask<Params, Progress, Result> Params:启动任务时传入的参数,通过调用asyncTask.execute(param)方法传入. Progress:后台任务执行的进度,若不用显示进度条,则不需要指定. Result:后台任务结束时返回的结果. 2. 重要方法 doInBackground(Params... params):必须重写的方法,后台任务就在这里执行,会开启一个新的线程.params为启动任务时传入的参数,参数个数不定. on

  • Handler实现线程之间的通信下载文件动态更新进度条

    1. 原理 每一个线程对应一个消息队列MessageQueue,实现线程之间的通信,可通过Handler对象将数据装进Message中,再将消息加入消息队列,而后线程会依次处理消息队列中的消息. 2. Message 初始化:一般使用Message.obtain()方法获取一个消息对象,该方法会检查Message对象池中是否存在可重复利用的对象,若无,才会new一个新对象. what:相当于Message的标识符,区别于其它消息. arg1.arg2:int类型,可传递整数. obj:objec

  • vue+vuex+axios+echarts画一个动态更新的中国地图的方法

    本文介绍了vue+vuex+axios+echarts画一个动态更新的中国地图的方法,分享给大家,具体如下: 一. 生成项目及安装插件 # 安装vue-cli npm install vue-cli -g # 初始化项目 vue init webpack china-map # 切到目录下 cd china-map # 安装项目依赖 npm install # 安装 vuex npm install vuex --save # 安装 axios npm install axios --save

  • python 实现将多条曲线画在一幅图上的方法

    如下所示: # -*- coding: utf-8 -*- """ Created on Thu Jun 07 09:17:40 2018 @author: yjp """ import matplotlib.pyplot as plt import numpy as np from matplotlib.ticker import MultipleLocator, FormatStrFormatter y0 = [] y1 = [] y2 =

  • django echarts饼图数据动态加载的实例

    如下所示: 后台关键代码: data = {} #keys与values分别为该数据的键数组,值的数组.这里循环为字典添加对应键值 for k, v in zip(keys, values): data.update({k: v, },) #最后将数据打包成json格式以字典的方式传送到前端 return render(request, 'index.html', {'data': json.dumps(data)}) 网页(js中)取值关键代码: 1.取值: var kv = new Arra

  • flask+layui+echarts实现前端动态图展示数据效果

    效果图: 该效果主要实现一个table展示数据,并在下方生成一个折线图. 实现方式: 1.首先需要对表格进行一个数据加载,这里用到了layui的table.render,具体用法可以参考 https://www.layui.com/doc/modules/table.html html部分: <table class="layui-hide" id="reportTableId" lay-filter="currentTableFilter"

随机推荐