Как использовать диаграммы в Flash Builder 4.5 - PullRequest
0 голосов
/ 06 января 2012

Я новичок в Flex и Actionscript (2 недели).

Я пытаюсь использовать диаграмму, в которой DataProvider является коллекцией ArrayCollection, которая содержит объекты «Person», например.Свойства человека - Возраст и Зарплата.

Моя диаграмма будет ColumnChart, а xField = Age, а yField будет AVG (или SUM) Зарплата для лиц с таким же возрастом.

Есть ли простой способ сделать это?Как я только что узнал, каждому человеку будет принадлежать один столбец в диаграмме.

Мой код mxml:

< mx :ColumnChart id="myChart" height="100%" color="0x323232"
showDataTips="true" dataProvider="{GraphArray}">

        < mx:series>

                < mx:ColumnSeries xField="age" yField="salary"/>

        < /mx:series>

< /mx:ColumnChart>

1 Ответ

1 голос
/ 06 января 2012

Насколько я знаю, стандартные диаграммы будут отображать только то, что вы им даете, поэтому вам нужно будет создать нового поставщика данных, который будет содержать среднее / сумму данных для каждой возрастной группы.

Чтобы сделать производного поставщика, который остается в курсе изменений в GraphArray, вы можете либо добавить прослушиватели в GraphArray, либо, если GraphArray только установлен и не изменен, вы можете избежать разбиения переменной на методы получения и установкичто-то вроде этого (непроверенного) кода:

Если у вас было

[Bindable]
public var GraphArray:ArrayCollection;

Замените его на

private var _GraphArray:ArrayCollection;
[Bindable]
private var DerivedGraphArray:ArrayCollection;

[Bindable]
public function get GraphArray():ArrayCollection
{
    return _GraphArray;
}

public function set GraphArray(value:ArrayCollection):void
{
    var ageBucketedArray:Array = new Array(121);
    var ageBucketedCountsArray:Array = new Array(121);

    //Compute salary sums
    for each (var o:Object in value)
    {
        if (ageBucketedArray[o["age"]])
        {
            ageBucketedArray[o["age"]] += o["salary"];
            ageBucketedCountsArray[o["age"]] += 1;
        }
        else
        {
            ageBucketedArray[o["age"]] = o["salary"];
            ageBucketedCountsArray[o["age"]] = 1;
        }
    }


    //Compute averages
    for (var age:int = 0; age < ageBucketedArray.length; age++)
    {
        if (ageBucketedArray[age])
        {
            ageBucketedArray[age] /= ageBucketedCountsArray[age];
        }
        else
        {
            ageBucketedArray[age] = 0;
        }
    }

    _GraphArray.removeAll();
    _GraphArray.addAll(value);
    DerivedGraphArray = new ArrayCollection(ageBucketedArray);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...