【问题标题】:reuse jqplot object to load or replot data重用 jqplot 对象来加载或重新绘制数据
【发布时间】:2010-12-23 16:09:39
【问题描述】:

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

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

chartObj.data = [graphData]

【问题讨论】:

  • 如果我有一个饼图,你能告诉我如何使用绘图吗? grlix 的回答似乎对我不起作用。

标签: javascript jquery jqplot


【解决方案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 函数。请记住,要重新绘制的实际系列必须命名为“数据”

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.com/docs/files/jqplot-core-js.html#jqPlot.data
  • @PaulH 谢谢!您目前是否有任何正在处理的 jqPlot 项目,并且可以验证传递数据作为第二个参数是否适用于重新绘制数据?我会相应地更新答案。
  • @C5H8NNaO4 .replot() 方法有效,但不应使用。这就是我使用 $.jqplot() 方法的原因,它的速度差不多 jsfiddle.net/ZqCXP/600
【解决方案3】:

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 表明这可以通过类似的性能来完成。

【讨论】:

    【解决方案4】:

    空图表 div,在渲染图表之前

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

    【讨论】:

      【解决方案5】:

      The API has a replot/redraw method

      重绘这可以改变绘图数据和属性,然后 彻底清除剧情并重绘。

      【讨论】:

      • 问题是我不知道如何使用它,你能给我举个例子吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多