我一直在试图找到一种方法来创建一个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根据状态对数据进行分组。
任何建议都会有所帮助。感谢
答案 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>