使用chart.js制作动态折线图

为了能给用户带来更好的使用体验,公司产品的传输状态能够让客户清晰的看到,从而实时观察设备和网络的情况,

为了保证引入库的统一性,用原本的chart.js的库来做动态的折线图:

1.定义初始变量

var myLine="";
var maxLength=30;
var index_bit = new Array(30);
var data = [0];
for (var i = 0; i < 30; i++) {
    index_bit[i] = i
}
var time="";

myLine是画图的实例,maxLength是当前显示横坐标最大数值,data是数据的初始值

2.定位画图位置

<div id="panel" style="margin:50px">
    <!--<canvas id="bit" height="250" width="600"></canvas>-->
    <!--为防止浏览器报错,id不要用canvas等-->
</div>

注意:为了防止停止定时器时,canvas会保留原来画图的数据,从而出现比较鬼畜的闪图现象,canvas最好是动态加载标签,

3.定时获取数据画图

    function paintLineChart(){
                var currentData=Math.random()*100+1;
                if(data.length>=30){
                    myLine.removeData();
                    myLine.addData([currentData],maxLength++)
                }else{
                    data.push(currentData);
                    var lineChartData = {
//                            横坐标
                        labels :index_bit,
                        datasets : [
                            {
                                fillColor : "rgba(220,220,220,0.5)",
                                strokeColor : "palevioletred",
                                pointColor : "palevioletred",
                                pointStrokeColor : "fff",
                                data :data
                            }
                        ]
                    };
                    var defaults={
                        animation : false
                    };
                    myLine = new Chart(document.getElementById("bit").getContext("2d")).Line(lineChartData,defaults);
                }
                time=setTimeout(function () {
                    paintLineChart()
                },1000);
            }

如果是ajax从后台获取数据的话,可以让currentData等于返回值的某一个字段,用timeOut而不用Interval是为了防止与交互时

数据不能马上返回或者返回时间太长,多条ajax命令并发会导致后台命令阻塞。

4.清除数据

clearTimeout(time);
myLine="";
maxLength=30;
index_bit = new Array(30);
data = [0];
for (var j = 0; j < 30; j++) {
    index_bit[j] = j
}
$("#panel").empty();

清除canvas标签,就可以清除掉保留在canvas上的数据,避免出现再次画图时会出现上次画图的曲线的闪图现象。

最终效果图如下:


5.提示

1)上面方法只是单一直线图,多条折线图可以参考chart.js的中文文档。

2)换图的库很多,例如highchart.echart等都可以用,我只是利用现有库进行制作。

3)横坐标最大值是在当前显示的最大格数,并不是实际的值,当达到最大值时,横坐标会动态替换,就想上面图显示的样子。

4)此方法还有很多不够完善的地方,例如无法限定纵坐标的值的范围,由库自行调整等,希望程序员朋友们指出错误和修改完善方法。


制作一个动态折线图的HTML网页通常涉及到HTML、CSS以及JavaScript的编写。这里我将提供一个简单的示例代码,使用HTML和JavaScript中的Chart.js库来创建一个动态折线图。 首先,你需要在HTML页面中包含Chart.js库,你可以通过CDN链接来引入它: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>动态折线图示例</title> <!-- 引入Chart.js库 --> <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> </head> <body> <!-- 创建canvas元素 --> <canvas id="myLineChart" width="400" height="400"></canvas> <script> // 获取canvas元素并创建Chart实例 var ctx = document.getElementById('myLineChart').getContext('2d'); var myLineChart = new Chart(ctx, { type: 'line', // 折线图 data: { labels: ["一月", "二月", "三月", "四月", "五月"], // x轴标签 datasets: [{ label: '数据集1', data: [1, 2, 3, 4, 5], // y轴数据 backgroundColor: 'rgba(255, 99, 132, 0.2)', borderColor: 'rgba(255, 99, 132, 1)', borderWidth: 1 }, { label: '数据集2', data: [5, 4, 3, 2, 1], backgroundColor: 'rgba(54, 162, 235, 0.2)', borderColor: 'rgba(54, 162, 235, 1)', borderWidth: 1 }] }, options: { scales: { yAxes: [{ ticks: { beginAtZero: true } }] } } }); </script> </body> </html> ``` 上述代码首先通过`<canvas>`标签创建了一个画布,然后使用Chart.js库定义了一个新的图表实例。这个实例是一个类型为`'line'`的折线图,它包含两个数据集(即两条折线),每个数据集都有自己的颜色、边界等属性。数据集的数据在`data`对象中定义,而`labels`对象定义了x轴的标签。 要使折线图动态化,你可能需要更新图表的数据,并调用`.update()`方法来重新渲染图表。这通常涉及到JavaScript的事件处理、定时器或者 AJAX 请求来更新数据。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值