Flex LineChart - 如何在ArrayCollection中从唯一值创建LineSeries

时间:2012-11-05 21:10:29

标签: flex arraycollection linechart lineseries

我一直在试图找到一种方法来创建一个LineChart,它包含ArrayCollection中基于LineSeries的大量关闭数据。

更具体地说,我们假设我们有一个ArrayCollection:

public var myArray:ArrayCollection = new ArrayCollection([{State:" Georgia",Year:" 2011",Percent:18},{State:" Georgia&# 34;,年份:" 2010",百分比:10},{州:"马里兰州",年份:" 2009",百分比:15},{州: " Maryland",Year:" 2008",Percent:15}]);

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

我想我可能不得不动态创建LineSeries,但不知道如何让ArrayCollection根据状态对数据进行分组。

任何建议都会有所帮助。感谢

2 个答案:

答案 0 :(得分:0)

结帐this example。简而言之,您需要在创建时为每个系列提供一个dataFunction。

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

答案 1 :(得分: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>