0

我一直在试图找出一种方法来创建一个 LineChart,该 LineChart 包含许多基于 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}]);

我想创建一个包含两条线的 LineChart:一条用于乔治亚州,一条用于马里兰州。格鲁吉亚的行将在单行上包含 2011 年和 2010 年的数据。马里兰线将在单行上包含 2009 年和 2008 年的数据。

我在想我可能必须动态创建 LineSeries,但不确定如何让 ArrayCollection 根据状态对数据进行分组。

任何的意见都将会有帮助。谢谢

4

2 回答 2

0

看看这个例子。简而言之,您需要在创建每个系列时为其指定一个 dataFunction。

编辑:实际上,您的数据很简单,您可能可以使用 xField/yField。

于 2012-11-05T22:03:32.303 回答
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 回答