重用jqplot对象来加载或重新绘制数据

时间:2010-12-23 16:09:39

标签: javascript jquery jqplot

我正在使用JqPlot图表,我的问题是我想在不同的点击事件上加载不同的数据。

但是一旦创建了图表并首次加载了数据;我不知道当另一个事件触发时如何加载数据意味着我想重用图表对象并希望在事件被触发时加载/重新绘制数据......

chartObj.data = [graphData]

5 个答案:

答案 0 :(得分:19)

答案 1 :(得分:17)

虽然这是一个老问题。

由于接受的答案对我不起作用,我也无法在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选项中定义的某些内容,例如图例标签,则可以将任何选项传递给重绘图函数。请记住,重新绘制的实际系列必须命名为“数据”

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 :(得分:2)

jqplot允许快速动态数据更新。

根据documentation(数据部分),“不应在选项对象中指定数据......”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表明这可以通过类似的表现来完成。

答案 3 :(得分:1)

渲染图形之前的空图形div

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

答案 4 :(得分:0)

The API has a replot/redraw method

  

重绘这样可以更改绘图数据和属性,然后更改   完全清理情节并重新绘制。