2012-01-06 77 views
0

我是Flex和Actionscript(2周)的新手。如何使用Flash Builder 4.5中的圖表

我想要使用一個Chart,其DataProvider是一個ArrayCollection,它包含對象 'Person'。人的財產是年齡和薪水。

我的圖表是一個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

據我所知,標準的圖表將只顯示你給他們什麼,所以你需要創建一個包含平均/和新的數據提供的每個年齡組的數據。

要使派生的提供者保持與GraphArray的更新保持同步,可以將偵聽器添加到GraphArray,或者如果只設置了GraphArray並且未修改,則可以將變量分解爲getter和制定者,像這樣(未經)代碼:

如果你有

[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); 
} 
相關問題