0

ArrayCollectionのデータに基づいて多数のLineSeriesを含む折れ線グラフを作成する方法を見つけようとしています。

具体的には、ArrayCollection自体があるとしましょう。

public var myArray:ArrayCollection = new ArrayCollection([{State: "Georgia"、Year: "2011"、Percent:18}、{State: "Georgia"、Year: "2010"、Percent:10}、{State: "メリーランド"、年:" 2009 "、パーセント:15}、{州:"メリーランド "、年:" 2008 "、パーセント:15}]);

ジョージア用とメリーランド用の2本の線を含む折れ線グラフを作成したいと思います。ジョージアの行には、2011年と2010年のデータが1行に含まれます。メリーランドラインには、2009年と2008年のデータが1本のラインに含まれます。

おそらくLineSeriesを動的に作成する必要があると思っていましたが、状態に基づいてデータをグループ化するためにArrayCollectionを取得する方法がわかりませんでした。

どんな提案も役に立ちます。ありがとう

4

2 に答える 2

0

これが最もクリーンな方法であるかどうかはわかりませんが、私が思いついたのは次のとおりです。

<fx:Script>
    <![CDATA[
        import mx.charts.series.LineSeries;
        import mx.collections.ArrayCollection;

        [Bindable]
        private var appData:ArrayCollection=new ArrayCollection([{State: "Georgia", Year: 2000, Percent: 15}, {State: "Georgia", Year: 2001, Percent: 12}, {State: "Georgia", Year: 2002, Percent: 5}, {State: "Maryland", Year: 1999, Percent: 12}, {State: "Maryland", Year: 2000, Percent: 7}]);

        protected function creationComplete(event:Event):void
        {
            var states:Array=new Array("Georgia", "Maryland");
            var series:Array=new Array();

            for each (var state:Object in states)
            {
                var data:ArrayCollection=new ArrayCollection();
                var ls:LineSeries=new LineSeries();

                for (var i:int=0; i < appData.length; i++)
                {
                    var currItem:String=appData.getItemAt(i).State;

                    if (currItem == state)
                    {
                        data.addItem(appData.getItemAt(i));
                    }
                }

                ls.yField="Percent";
                ls.xField="Year";
                ls.displayName=state.toString();
                ls.dataProvider=data;
                series.push(ls);
            }

            linechart.series=series;
        }
    ]]>
</fx:Script>

<mx:Panel title="US States Data"
          height="100%"
          width="100%"
          layout="horizontal">

    <mx:LineChart id="linechart"
                  height="100%"
                  width="100%"
                  paddingLeft="5"
                  paddingRight="5"
                  showDataTips="true"
                  dataProvider="{appData}">

        <mx:horizontalAxis>
            <mx:CategoryAxis categoryField="Year"/>
        </mx:horizontalAxis>

    </mx:LineChart>

    <mx:Legend dataProvider="{linechart}"/>

</mx:Panel>
于 2012-11-06T13:46:41.700 に答える
0

この例をチェックしてください。簡単に言えば、各シリーズを作成するときに dataFunction を指定する必要があります。

編集: 実際、データは単純で、おそらく xField/yField を使用できます。

于 2012-11-05T22:03:32.303 に答える