Я сделаю снимок. Вероятно, есть более изящный способ или какая-то эффективность, но ...
Превратите ваш XML в ArrayCollection объектов
{категория: "красный", другие_данные: "не имеет значения"}
,
,
.
Оттуда ...
var categoryGroup:GroupingCollection=new GroupingCollection();
categoryGroup.source=ac; // you're ArrayCollection
var grouping:Grouping=new Grouping();
var groupingField:GroupingField=new GroupingField("category");
grouping.fields=[groupingField];
categoryGroup.grouping=grouping;
categoryGroup.refresh();
var categoryAC:ArrayCollection=categoryGroup.getRoot() as ArrayCollection;
chart.dataProvider=categoryAC;
Кроме этого, вам придется творить магию на графике ...
<mx:PieChart id="chart" height="100%" width="100%">
<mx:series>
<mx:PieSeries dataFunction="myDataFunction" labelFunction="myLabelFunction" labelPosition="callout"/>
</mx:series>
</mx:PieChart>
Вы обработчики функций диаграммы
public function myDataFunction(series:Series, item:Object, fieldName:String):Object
{
return (item.children.length);
}
public function myLabelFunction(data:Object, field:String, index:Number, percentValue:Number):String
{
return data.GroupLabel;
}
Это может быть слишком тяжело, но это сработает, и его можно будет расширить в других сценариях.