2012-01-06 11 views
0

フレックスとアクションスクリプト(2週間)に新たに追加されました。Flash Builder 4.5でのチャートの使用方法

私は、DataProviderがObjectを含むArrayCollectionであるChartを使用しようとしています。 たとえば 'Person'。人のプロパティは年齢と給料です。

マイチャートはColumnChartになり、xField = AgeとyFieldは同じ年齢のPersonのAVG(またはSUM)給与になります。

これを行う簡単な方法はありますか? 私が今学んだ方法を使って、各Personは1つのColumnをチャートに所有します。

私の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のみが設定され、変更されていない場合は変数をゲッターとセッター、このような何か(未テスト)コード:

あなたは

[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); 
} 
に交換してください
関連する問題