повторно использовать объект jqplot для загрузки или повторного размещения данных - PullRequest
14 голосов
/ 23 декабря 2010

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

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

chartObj.data = [graphData]

Ответы [ 5 ]

19 голосов
/ 14 января 2011

Похоже, что это работает для пересчета данных.

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, надеюсь, что это поможет.

17 голосов
/ 09 апреля 2013

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

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

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

Src: взглянем на функцию replot.

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) }
показывает нам, что ему нужно истинное значение для передачи его в качестве первого параметра внутренней функции повторной инициализации. который определяется как var ap = an.data || null;

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


Обратите внимание, что если вы хотите перерисовать некоторые вещи, определенные в опциях jqPlot, например, метки легенды, вы можете просто передать любую опцию в функцию 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)
2 голосов
/ 18 января 2016

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

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

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

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

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

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

1 голос
/ 08 апреля 2014

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

$('#graphDiv').empty();
plot = $.jqplot('graphDiv', [graphValues], graphOptions);
0 голосов
/ 23 декабря 2010

В API есть метод перерисовки / перерисовки

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

...