3

我有一个简单的应用程序,它每分钟轮询数据库中的数据。当获取新数据时,我正在使用 ajax 更新图表。但是,每当我更新图表(使用添加到绘图数据的新值重新绘制它)时,当前的缩放状态都会丢失。在更新图表之前,我想保留最新的缩放位置。更新图表后,我想将图表缩放到其保存的位置。这很重要,因为每分钟重新缩放很烦人。这可能吗?

4

3 回答 3

3

我从 Ozan 尝试了这个答案,但我无法让复制缩放的块起作用,所以我只使用了 plot.getOptions() 并用它来绘制图形。像这样:

var oldOptions = plot.getOptions();
plot = $.plot($("#graph"), data, oldOptions);

这样,您可以动态更改视图,并且自动更新将在不更改视图的情况下更新。

于 2012-03-18T09:11:29.400 回答
2

这是 Joshua Varner 的答案1

在重新绘制之前获取新数据时,获取当前缩放并将其添加到更新选项中。

// Get the current zoom
var zoom = plot.getAxes();

// Add the zoom to standard options
var zoomed = {};
$.extend(zoomed,options);
zoomed.xaxis.min = zoom.xaxis.min;
zoomed.xaxis.max = zoom.xaxis.max;
zoomed.yaxis.min = zoom.yaxis.min;
zoomed.yaxis.max = zoom.yaxis.max;

// draw/save the plot
plot = $.plot($("#graph"), d, zoomed);
于 2011-02-07T21:31:14.723 回答
0

您应该获取有关当前轴状态的信息,将其与您的初始选项合并,然后将它们提供给新绘图。

// Deep copy of the options object so that we can keep it unchanged
// for when we don't want to preserve the zoom.
var copyOptions = $.extend(true, {}, options);

if (plot != null && preserveZoom) {
    // There might be more than one Y axis
    var zoomY = plot.getYAxes();

    for (var i = 0; i < zoomY.length; i++) {
        copyOptions.yaxes[i].min = zoomY[i].min;
        copyOptions.yaxes[i].max = zoomY[i].max;
    }

    // Considering only one X axis, in case of more than one
    // you should use the same method as for the Y axis.
    copyOptions.xaxis.min = plot.getXAxes()[0].min;
    copyOptions.xaxis.max = plot.getXAxes()[0].max;
}

plot = $.plot("#placeholder", data, copyOptions);
于 2014-01-24T10:42:51.577 回答