0

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

我的代码如下。它有两个问题:1) $.plot 什么都不做 - 没有错误也没有 grapy 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
        }
    });
}
4

2 回答 2

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 + '}');
于 2012-12-14T18:40:47.557 回答
1

固定的。请参阅将数据作为变量传递时 jQuery Flot 数据的格式是什么。问题是我没有正确地将数据对象格式化为 JSON 对象。

于 2012-12-18T22:33:35.553 回答