Как сохранить (сохранить) состояние масштабирования графиков с плавающей точкой при обновлении с помощью AJAX - PullRequest
3 голосов
/ 12 мая 2010

У меня есть простое приложение, которое каждую минуту опрашивает базу данных. При получении новых данных я обновляю график с помощью ajax. Однако всякий раз, когда я обновляю график (заново строю его, добавляя новые значения к данным графика), текущее состояние масштабирования теряется. Перед обновлением графика я хочу сохранить последнюю позицию увеличения. После обновления графика я хочу увеличить график до его сохраненного положения. Это важно, потому что повторное масштабирование каждую минуту раздражает. Возможно ли это?

Ответы [ 3 ]

3 голосов
/ 18 марта 2012

Я попробовал этот ответ от Озана, и я не смог заставить блок для копирования масштабирования работать, поэтому я просто использовал plot.getOptions () и использовал его для рисования графика. Как это:

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

Таким образом, вы можете динамически изменять вид, и автообновление будет обновляться без изменения вида.

2 голосов
/ 08 февраля 2011

Вот ответ Джошуа Варнера 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);
0 голосов
/ 24 января 2014

Вы должны получить информацию о состоянии текущих осей, объединить ее с вашими первоначальными параметрами и затем предоставить их новому графику.

// 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);
...