我能够成功绘制图表,但调用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属性在更新时会如此狂暴!
答案 0 :(得分:0)
好吧,我摆弄并通过将我的数据订阅方法更改为:
来设法解决这个问题chartConfig.data.subscribe(function (newValue) {
if (jqChart) {
jqChart.series[0].data = newValue;
jqChart.replot();
console.log("chart replotted", newValue);
}
});
我所做的只是手动定位特定系列并在没有选项的情况下调用replot。不知道它为什么会起作用,但确实如此。