Как динамически изменить средство визуализации jqplot?

По сути, я хочу, чтобы пользователь мог изменить тип графика, щелкнув раскрывающееся меню: BarRenderer, PieRenderer и т. д. Данные одинаковы. Я знаю, что могу снова вызвать $.jqplot() для того же элемента, но тогда мне придется снова передать все настройки. И моя страница имеет переменное количество графиков, что делает этот вариант очень плохим выбором.

Я нашел ссылку об этом: http://groups.google.com/group/jqplot-users/browse_thread/thread/efe6511cd9496f16/5c625baf78d3b0ae, но, похоже, мне все еще нужно снова вызвать $.jqplot().

Есть лучший способ сделать это? И еще один маленький вопрос: это только у меня так, или документация по jqplot плохая? Мне приходится просматривать несколько мест, чтобы найти нужный вариант (иногда этот параметр не задокументирован или я каким-то образом не смог его найти). Как научиться пользоваться jqplot?


person Anh Pham    schedule 27.08.2011    source источник
comment
Обновите данные и повторите печать plot1.series[0].data = newData; plot1.resetAxesScale(); plot1.replot(); stackoverflow.com/a/10901538/516748   -  person KCD    schedule 18.10.2012


Ответы (1)


Я думаю, что документы в порядке, но вы найдете внутри них скрытые функции или причуды, которые не задокументированы. IIRC (это было давно), вам придется снова вызвать $.jqplot(), но сначала вам нужно .empty() вашу цель, иначе вы получите дополнительные/испорченные холсты.

Что вам действительно нужно сделать, так это сохранить ваши данные и разрешить их вызов позже:

//This isn't real jqplot syntax but it should give you a good idea of what I'm explaining

var charts = [{name:"chart1",renderer:"pie",data:[[1,2],[2,3]]}]
$('#graph').jqplot(charts[0]);

//later
charts[0].renderer = "bar";
$('#graph').empty().jqplot(charts[0]);
person aknosis    schedule 27.08.2011
comment
Обязательно вызовите destroy() на вашем графике перед этим вызовом empty(), иначе у вас будут утечки памяти. Сохраните диаграмму, возвращенную первым вызовом jqplot, в переменную, а затем в следующем разделе вызовите chart.destroy(); перед восстановлением участка. - person Irongaze.com; 01.05.2012