Как отобразить сгруппированные данные XML на круговой диаграмме Flex? - PullRequest
0 голосов
/ 10 июня 2010

Я изучил группирование данных XML с помощью GroupingCollections и AdvancedDataGrids, но не могу понять, как отобразить эти данные на диаграмме.

По сути, я хочу сгруппировать данные пополе категории, которое должно дать мне два ряда под красным, один под синим и один под зеленым.При вводе этих данных в круговую диаграмму они должны занимать нужное количество места (1/2 для красного, 1/4 для синего и зеленого).Мне не нужно поле other_data, так как я хотел бы использовать имя группы (в данном случае категорию) в качестве выноски.

Есть предложения?

Пример данных:

<row>
  <category>red</category>
  <other_data>this shouldn't really matter</other_data>
</row>
<row>
  <category>blue</category>
  <other_data>this shouldn't really matter</other_data>
</row>
<row>
  <category>red</category>
  <other_data>this shouldn't really matter</other_data>
</row>
<row>
  <category>green</category>
  <other_data>this shouldn't really matter</other_data>
</row>

1 Ответ

1 голос
/ 10 июня 2010

Я сделаю снимок. Вероятно, есть более изящный способ или какая-то эффективность, но ...

Превратите ваш 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;
}

Это может быть слишком тяжело, но это сработает, и его можно будет расширить в других сценариях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...