использовать jqplot объект для загрузки или replot данных

Я использую JqPlot для диаграмм, моя проблема в том, что я хочу загружать разные данные по разным событиям щелчка.

но как только диаграмма создается и загружается с данными в первый раз; я не знаю, как загружать данные, когда другое событие срабатывает, что означает, что я хочу повторно использовать объект диаграммы и хочу загрузить/replot данные, когда события запускаются что-то вроде...

chartObj.data = [graphData]

5 ответов


это, похоже, работает для репликации данных.

chartObj.series[0].data = [[0, 4], [1, 7], [2, 3]];
chartObj.replot();

кроме того, вы можете проверить это: https://groups.google.com/group/jqplot-users/browse_thread/thread/59df82899617242b/77fe0972f88aef6d%3Fq%3D%2522Groups.%2BCom%2522%2377fe0972f88aef6d&ei=iGwTS6eaOpW8Qpmqic0O&sa=t&ct=res&cd=71&source=groups&usg=AFQjCNHotAa6Z5CIi_-BGTHr_k766ZXXLQ?hl=enНадеюсь, это поможет.


хотя это старый вопрос.

поскольку принятый ответ не работал для меня,и я не мог найти решение в документах jqPlot. Я пришел к этому решению

var series = [[1,2],[2,3]];
chartObj.replot({data:series});

Src: взглянув на .

function (am) {
    var an = am || {};
    var ap = an.data || null;
    var al = (an.clear === false) ? false : true;
    var ao = an.resetAxes || false;
    delete an.data;
    delete an.clear;
    delete an.resetAxes;
    this.target.trigger("jqplotPreReplot");
    if (al) {
        this.destroy()
    }
    if (ap || !L.isEmptyObject(an)) {
        this.reInitialize(ap, an)
    } else {
        this.quickInit()
    } if (ao) {
        this.resetAxesScale(ao, an.axes)
    }
    this.draw();
    this.target.trigger("jqplotPostReplot")
}

линия if (ap || !L.isEmptyObject(an)) { this.reInitialize(ap, an) }
показывает нам, что ему нужно истинное значение для ap, чтобы передать его в качестве первого параметра внутренней функции повторной инициализации. который определяется как var ap = an.data || null;

его так просто, как это, но к сожалению, нигде не документировано, я мог найти его


обратите внимание, что если вы хотите перерисовать некоторые вещи, определенные в параметрах jqPlot, например метки легенд, вы можете просто передать любую опцию функции replot. Просто помните, что фактическая серия для replot должна быть названа "data"

var options = {
     series : [{
            label: 'Replotted Series',
            linePattern: 'dashed'
     }],
   //^^^ The options for the plot
     data : [[1,2],[2,3]]
   //^^^ The actual series which should get reploted
}
chartObj.replot (options)

jqplot позволяет быстро обновлять динамические данные.

по словам документация (раздел данных), " данные не должны указываться в объекте options ..." (скрипка)

plot1.replot({data: [storedData]}); // data should not be passed this way

"... но передайте в качестве второго аргумента $.jqplot (функция)."

if (plot1) plot1.destroy();
plot1 = $.jqplot('chart1', [storedData]); // similar speed to replot

на скрипка показывает, что это можно сделать с аналогичной производительностью.


пустой граф div, перед рендерингом графика

$('#graphDiv').empty();
plot = $.jqplot('graphDiv', [graphValues], graphOptions);

API имеет метод replot / redraw

перерисовывать это позволяет изменить данные и свойства графика, а затем полностью очистить участок и перерисовать.