如何在Flash Builder 4.5中使用图表

时间:2012-01-06 12:40:39

标签: flex charts

我是Flex和Actionscript的新手(2周)。

我试图使用一个Chart,其DataProvider是一个包含Objects的ArrayCollection '人'例如。人的属性是年龄和薪水。

我的图表将是ColumnChart,xField = Age,yField将是年龄相同的人的AVG(或SUM)薪水。

有什么简单的方法吗? 使用我刚刚学到的方法,每个人都会在图表中拥有一个列。

我的mxml代码:

< mx :ColumnChart id="myChart" height="100%" color="0x323232"
showDataTips="true" dataProvider="{GraphArray}">

        < mx:series>

                < mx:ColumnSeries xField="age" yField="salary"/>

        < /mx:series>

< /mx:ColumnChart>

1 个答案:

答案 0 :(得分:1)

据我所知,标准图表只会准确显示您提供给他们的内容,因此您需要创建一个新的数据提供者,其中包含每个年龄段的数据的平均值/总和。

要使派生的提供程序保持最新的GraphArray更改,您可以向GraphArray添加侦听器,或者,如果GraphArray仅设置且未修改,则可以将变量分解为getter和setter ,像这样(未经测试的)代码:

如果你有

[Bindable]
public var GraphArray:ArrayCollection;

将其替换为

private var _GraphArray:ArrayCollection;
[Bindable]
private var DerivedGraphArray:ArrayCollection;

[Bindable]
public function get GraphArray():ArrayCollection
{
    return _GraphArray;
}

public function set GraphArray(value:ArrayCollection):void
{
    var ageBucketedArray:Array = new Array(121);
    var ageBucketedCountsArray:Array = new Array(121);

    //Compute salary sums
    for each (var o:Object in value)
    {
        if (ageBucketedArray[o["age"]])
        {
            ageBucketedArray[o["age"]] += o["salary"];
            ageBucketedCountsArray[o["age"]] += 1;
        }
        else
        {
            ageBucketedArray[o["age"]] = o["salary"];
            ageBucketedCountsArray[o["age"]] = 1;
        }
    }


    //Compute averages
    for (var age:int = 0; age < ageBucketedArray.length; age++)
    {
        if (ageBucketedArray[age])
        {
            ageBucketedArray[age] /= ageBucketedCountsArray[age];
        }
        else
        {
            ageBucketedArray[age] = 0;
        }
    }

    _GraphArray.removeAll();
    _GraphArray.addAll(value);
    DerivedGraphArray = new ArrayCollection(ageBucketedArray);
}