7

我想按时间间隔顺序更新 jqPlot 绘制的图表。

我的用例是 AJAX 调用只返回一个值。例如:

1st AJAX call: 20
2nd AJAX call: 30
3rd AJAX call: 40
4th AJAX call: 32

所以我想绘制如下图:

First: only 20
Second: 20,30
Third: 20,30,40
Fourth: 20,30,40,32

我们可以在 JQPlot 中提取已经绘制的数据,然后附加这个新数据集并重新绘制图形吗?

有人可以帮忙吗??

4

2 回答 2

14

您需要将数据存储在数组中,然后在每次 ajax 调用中将新数据推送到数组中。

这是一个简单的演示,使用按钮以 3 秒的间隔启动 AJAX 更新:

/* store empty array or array of original data to plot on page load */

var storedData = [3, 7];

/* initialize plot*/

var plot1;
renderGraph();

$('button').click( function(){
    doUpdate();
    $(this).hide();
});

function renderGraph() {
    if (plot1) {
        plot1.destroy();
    }
    plot1 = $.jqplot('chart1', [storedData]);
}
/* sample data for demo*/   
var newData = [9, 1, 4, 6, 8, 2, 5];


function doUpdate() {
    if (newData.length) {
        /* used to pull new number from sample data for demo*/
        var val = newData.shift();

        $.post('/echo/html/', {
            html: val
        }, function(response) {
            var newVal = new Number(response); /* update storedData array*/
            storedData.push(newVal);
            renderGraph();               
            setTimeout(doUpdate, 3000)
        })

    } else {
        alert("All Done")
    }
}

演示:http: //jsfiddle.net/ZqCXP/

于 2012-12-01T16:33:33.267 回答
5

让我添加到@charlietfl 答案。当您使用 replot() 时,重绘需要 2 倍的时间,而不是破坏 jqplot。所以使用 destroy() 重绘绘图。

$.jqplot('chart1', [storedData]).replot();

http://jsfiddle.net/zjjvm/使用 replot() 绘制运行正弦需要 46 秒

plot1.destroy();
plot1 = $.jqplot('chart1', [storedData])

http://jsfiddle.net/p9SbP/使用destroy() 绘制相同内容需要25 秒

于 2013-10-19T22:44:03.517 回答