jqplot.replot无法正常工作。图例仅由2个标签代替:“1”和“2”

时间:2013-12-11 09:01:05

标签: javascript jqplot

我能够成功绘制图表,但调用replot会破坏图表和数据。

var jqChart;

chartConfig.data([
            ['material', 20],
            ['transportS2M', 10],
            ['processing', 14],
            ['packaging', 12],
            ['transportM2D', 30],
            ['use', 14]
    ]);


jqChart = $.jqplot("chart", [chartConfig.data()], 
    {
        seriesDefaults: {
            // Make this a pie chart.
            renderer: jQuery.jqplot.PieRenderer,
            rendererOptions: {
                // Put data labels on the pie slices.
                // By default, labels show the percentage of the slice.
                showDataLabels: true
            }
        },
        legend: {
            show: true,
            placement: 'outside',
            rendererOptions: {
                numberRows: 1
            },
            location: 's',
            marginTop: '15px'
        }
    });

// example to change the data
setTimeout(function () {
chartConfig.data([
        ['material', 10],
        ['transportS2M', 20],
        ['processing', 14],
        ['packaging', 22],
        ['transportM2D', 20],
        ['use', 14]
]);

}, 4000);


chartConfig.data.subscribe(function (newValue) {
    var opts = {
        data: newValue
    };
    if (jqChart) {
        jqChart.replot(opts);
        console.log("chart replotted", opts);
    }
}); 

在初始调用创建jqChart之后,“_plotdata”属性在chrome变量检查器中显示:

_plotData: Array[2]
0: Array[6]
    0: Array[2]
        0: "material"
        1: 20
        length: 2
        __proto__: Array[0]
1: Array[2]
2: Array[2]
3: Array[2]
4: Array[2]
5: Array[2]
length: 6
__proto__: Array[0]
1: Array[6]
length: 2

(除了实际值之外,每个数组与扩展的数组相同)。

我不知道为什么plotdata似乎有一个重复的数组,但它显示完美。

一旦“replot”调用完成,“_plotdata”属性就会有点狂暴:

_plotData: Array[12]
0: Array[2]
   0: Array[2]
      0: 1
      1: "material"
      length: 2
      __proto__: Array[0]
   1: Array[2]
   length: 2
   __proto__: Array[0]
1: Array[2]
0: Array[2]
0: 1
1: "transportS2M"
length: 2
__proto__: Array[0]
1: Array[2]
length: 2
__proto__: Array[0]
2: Array[2]
3: Array[2]
4: Array[2]
5: Array[2]
6: Array[0]
7: Array[2]
8: Array[0]
9: Array[2]
10: Array[0]
11: Array[2]
length: 12

......饼图消失了。图例仅由2个标签代替:“1”和“2”。

我很确定我正确地调用了这个,所以我很困惑为什么_plotdata属性在更新时会如此狂暴!

1 个答案:

答案 0 :(得分:0)

好吧,我摆弄并通过将我的数据订阅方法更改为:

来设法解决这个问题
chartConfig.data.subscribe(function (newValue) {
    if (jqChart) {
        jqChart.series[0].data = newValue;
        jqChart.replot();
        console.log("chart replotted", newValue);
    }
});

我所做的只是手动定位特定系列并在没有选项的情况下调用replot。不知道它为什么会起作用,但确实如此。