更新flot数据和轴

时间:2014-07-15 15:17:29

标签: javascript jquery ajax flot

我创建了一个高度互动的图表。所有的交互都是在不重新启动flot对象的情况下实现的。重新启动flot对象会导致交互中断,我本来希望尽可能高效地完成此操作。

我的图表支持的互动是:

  • 更改个别系列的可见性
  • 多个y轴并在它们之间切换
  • 缩放图表(带重置)
  • 点击并拖动平移

我必须添加的最后两个功能是:

  • 添加/减去单个系列
  • 更新个别系列

这两个都需要ajax请求,图表必须支持1000个数据点,因此效率是关键(我必须在某个时候减少数据点)。

正如我所提到的,到目前为止我已经设法完成所有这些而没有多次调用$ .plot,我使用了插件内置函数并从getOptions()方法设置了一些选项。而不是使用$ .plot我调用plot.draw()方法来更新图表。但是,我仍然在努力寻找将数据推送到所提供的方法中的方法,这些方法不再需要再次调用整个函数(除此之外,更难以跟踪我在选项中更改的变量。)

我的问题是,有没有人有使用ajax请求更新,而不是更换,使用磁盘轴和数据的经验,以及如何实现有效的结果?

1 个答案:

答案 0 :(得分:2)

您缺少的方法是setupGrid。这将重新创建轴而无需重新启动绘图。

一般来说,我修改现有情节的工作流程如下:

var series = plot.getData(); // reference to your series
series[0].data = someNewArray;
series[0].color = 'blue'; // modify existing series
series.push({data: [[0, 5], [1, 1], [2, 7]], color: 'green'}); // add a new one
plot.setData(series); // you need to set the data so that flot will re-process any newly added series
var opts = plot.getOptions() // get a reference to the options
opts.xaxes[0].min = -1; // adjust an axis min, use the xaxes property NOT the xaxis
// there is no need to "setOptions"...
plot.setupGrid() // if you need to redraw the axis/grid
plot.draw()