JQuery Flot : 如何将数据添加到现有的点图而不是重新绘制
JQuery Flot : How to add data to the existing point graph instead of redrawing
我正在绘制一个点图,该图应该每 5 秒更新一次新数据。这里最小和最大范围总是固定的
目前,当我从服务器获取新数据时,我会将新数据合并到现有 source.data 并绘制完整的图表。
所以,我不想一次又一次地重新绘制完整的数据。随着 source.data 的长度增加,性能下降。因此,我可以只将新数据添加到现有图形中,而不是重新绘制完整数据吗
请在此处查找源代码
var source = [
{
data: [],
show: true,
label: "Constellation",
name: "Constellation",
color: "#0000FF",
points: {
show: true,
radius: 2,
fillColor: '#0000FF'
},
lines: {
show: false
}
}
]
var options = {...}
$.getJSON(URL , function(data) {
...
$.merge(source[0].data, new_data);
plotObj = $.plot("#placeholder", source, options);
}
按照以下步骤操作:
plotObj.setData(newData);
plotObj.setupGrid(); //if you also need to update axis.
plotObj.draw(); //to redraw data
另一个有用的方法是 getData()。使用此方法可以获取当前数据。
var data = plotObj.getData();
应避免您反复调用 $.plot
的方法。它曾经泄漏内存(不确定是否仍然存在)。
也就是说,@Luis 很接近,但让我们把它们放在一起。要将数据添加到现有绘图,请执行以下操作:
var allData = plotObj.getData(); // allData is an array of series objects
allData[seriesIndex].data.push([newXPoint,newYPoint]);
plotObj.setData(allData);
plotObj.setupGrid(); // if axis have changed
plotObj.draw();
需要注意的是,这确实重绘了整个情节。这是不可避免的和HTML5canvas。 但是 flot 绘制速度非常快,您几乎不会注意到它。
我正在绘制一个点图,该图应该每 5 秒更新一次新数据。这里最小和最大范围总是固定的
目前,当我从服务器获取新数据时,我会将新数据合并到现有 source.data 并绘制完整的图表。
所以,我不想一次又一次地重新绘制完整的数据。随着 source.data 的长度增加,性能下降。因此,我可以只将新数据添加到现有图形中,而不是重新绘制完整数据吗
请在此处查找源代码
var source = [
{
data: [],
show: true,
label: "Constellation",
name: "Constellation",
color: "#0000FF",
points: {
show: true,
radius: 2,
fillColor: '#0000FF'
},
lines: {
show: false
}
}
]
var options = {...}
$.getJSON(URL , function(data) {
...
$.merge(source[0].data, new_data);
plotObj = $.plot("#placeholder", source, options);
}
按照以下步骤操作:
plotObj.setData(newData);
plotObj.setupGrid(); //if you also need to update axis.
plotObj.draw(); //to redraw data
另一个有用的方法是 getData()。使用此方法可以获取当前数据。
var data = plotObj.getData();
应避免您反复调用 $.plot
的方法。它曾经泄漏内存(不确定是否仍然存在)。
也就是说,@Luis 很接近,但让我们把它们放在一起。要将数据添加到现有绘图,请执行以下操作:
var allData = plotObj.getData(); // allData is an array of series objects
allData[seriesIndex].data.push([newXPoint,newYPoint]);
plotObj.setData(allData);
plotObj.setupGrid(); // if axis have changed
plotObj.draw();
需要注意的是,这确实重绘了整个情节。这是不可避免的和HTML5canvas。 但是 flot 绘制速度非常快,您几乎不会注意到它。