Повторно использовать объект jqplot для загрузки или репликации данных
Я использую JqPlot для диаграмм, моя проблема в том, что я хочу загружать разные данные в разные события кликов.
Но как только диаграмма создается и загружается данными в первый раз; я не знаю, как загрузить данные при возникновении другого события, что означает, что я хочу повторно использовать объект диаграммы и хочу загружать/реплицировать данные, когда события срабатывают, например...
chartObj.data = [graphData]
Ответы
Ответ 1
Это похоже на работу с реплицированными данными.
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, надеюсь, что это поможет.
Ответ 2
Хотя это старый вопрос.
Поскольку принятый ответ не работал у меня, и я не мог найти решение в документах 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)
}
показывает нам, что для того, чтобы ap передал его в качестве первого параметра внутренней функции повторного инициализации, требуется истинное значение. который определяется как var ap = an.data || null;
Его так просто, как это, но, к сожалению, не документировано нигде, я мог бы найти его
Обратите внимание, что если вы хотите перерисовать некоторые вещи, определенные в ваших параметрах jqPlot, например метки легенд, вы можете просто передать любую функцию функции replot. Просто помните, что фактическая серия для replot должна быть названа "данными"
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)
Ответ 3
jqplot позволяет быстро обновлять динамические данные.
Согласно документации (раздел данных), "Данные не должны указываться в объекте options..." (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
fiddle показывает, что это можно сделать с аналогичной производительностью.
Ответ 4
Пустой граф div, перед тем как отобразить график
$('#graphDiv').empty();
plot = $.jqplot('graphDiv', [graphValues], graphOptions);
Ответ 5
API имеет метод replot/redraw
Перерисовать. Это позволяет изменять данные и свойства сюжета, а затем комлетически очистить график и перерисовать.