我一直在试图找出一种创建一种基于数组汇编数据的线路线的方法。
要更具体,假设我们有一个数组汇编:
public var myarray:arrayCollection = new ArrayCollection([[{state:" Georgia",年:" 2011",百分比:18},{state:" GEORGIA"," GEORGIA",年:" 2010",百分比:10},{状态:"马里兰州",年:" 2009",百分比:15},{州:"马里兰州",年:" 2008",百分比:15}]);
我想创建一个包含两条线的弹力机:一条用于佐治亚州,另一个用于马里兰州。佐治亚州的线路将包含单线上的2011年和2010年数据。马里兰线将包含2009年和2008年的数据。
我认为我可能必须动态创建线条,但不确定如何获取数组汇编以将数据分组为基于状态的数据。
任何建议都会有所帮助。谢谢
查看此示例。简而言之,您需要在创建它时为每个系列提供一个数据函数。
编辑:实际上,您的数据很简单,您可以使用Xfield/Yfield。
不确定这是最干净的方法,但这是我想到的:
<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>