2012-12-14 126 views
0

我需要一个饼图并找到Flot。它看起来简单而强大,但我发现的所有例子都描述了使用固定值的“数据”(例如[1,2]),但我需要显示动态数据。我有五个变量必须最终加起来为100.我只想包含那些值大于0的变量,如果它们不总计为100,我想添加一个显示缺失百分比的元素。问题是我不知道如何动态构造数据参数。Flot饼图不显示(修改代码)

我的代码如下。有两个问题是: 1)$ .plot什么都不做 - 没有错误,没有葡萄的 2)我不知道如何添加标签文本

function updatePieChart() { 
    var total = 0; 
    var data = new Array(); 
    var verb = ""; 
    var dataIndex = 0; 

    for (var dataIndex = 0; dataIndex < 5; dataIndex++) { 
     var duty = "DUTY_" + (dataIndex + 1); 
     var d = getData(duty + "_PERCENTAGETIMESPENT"); 
     if (isNumeric(d)) { 
      d = parseInt(d); 
      if (d > 0) { 
       total += d; 
       data[dataIndex] = new Array(); 
       data[dataIndex].push(d); 
       verb = getData(duty + "_SKILL"); 
       if (verb == "") verb = duty + dataIndex; 
       log(duty + dataIndex + ' value: ' + d); 
      } 
     } 
    } 

    var count = data.length; 
    if (total != 100) { 
     if (total < 100) { 
      var missingDataNum = 100 - total; 
      data[count] = new Array(); 
      data[count].push(missingDataNum); 
      verb = '**MISSING**'; 
      log(verb + missingDataNum); 
     } 
    } 

    $.plot($('#pieChart'), data, 
     { 
     series: { 
      pie: { 
       show: true, 
      } 
     }, 
     legend: { 
      show: false 
     } 
    }); 
} 

回答

1
var ary = new Array(); 


ary.push(1); // this is where you would push the numbers that are supposed to add to 100 
ary.push(2); 
ary.push(23); 
ary.push(40); 
ary.push(10); 
ary.push(8); 

var result = 0; 
for (var i = 0; i< ary.length; i++) { 
result += ary[i]; 
} 

现在result应该包含总数。下一个:

if (result < 100){ 
    var missing = 100 - result; 
    ary.push(missing); 
} 

然后我推missing到数组的末尾。因此,数组的内容将精确到100,而“空白”(在本例中为16)是图中最后一个元素。

这是你在找什么?

编辑 - 我会做以下事情,以防止+在JS中感到困惑。

if (total != 100) { 
    if (total < 100) { 
     var missinDataNum = 100 - total; 
     series.push('{label: **MISSING**,data: ' + missingDataNum + '}'); 
    } 
} 

*第二编辑*

if (d1 > 0) series.push('{label: "' + d1v + '",data: ' + d1 + '}'); 
if (d2 > 0) series.push('{label: "' + d2v + '",data: ' + d2 + '}'); 
if (d3 > 0) series.push('{label: "' + d3v + '",data: ' + d3 + '}'); 
if (d4 > 0) series.push('{label: "' + d4v + '",data: ' + d4 + '}'); 
if (d5 > 0) series.push('{label: "' + d5v + '",data: ' + d5 + '}'); 
+0

它很接近,但还不够接近。我会编辑我的问题以使其更清楚,并感谢您的回复。 –

+0

你的错误是什么?我更新了我的答案,如果是我的程序,我会做出一些小修复。 – Zak

+0

饼图显示默认值(从左下角到右上角的对角线),但不显示饼图。有一些关于我在series.push语句中格式化数据的方式是不正确的。 –