Обратный порядок баров в Flex BarChart

Я пытаюсь использовать BarChart в Flex. Я бы хотел, чтобы столбцы упорядочивались в соответствии с порядком набора ArrayCollection, который я ему передал. то есть данные с индексом 0 должны быть первым баром сверху. Однако Флекс дает мне совершенно обратный порядок. то есть данные с индексом 0 не являются последним баром внизу.

Как я могу сказать BarChart изменить порядок, кроме как изменить порядок моей коллекции ArrayCollection? Спасибо!!

Вот блок кода в моем теге script:

[Bindable]
private var optionsArray:ArrayCollection = new ArrayCollection([
        new VotingOption('Yes, it rocks!', 'yes', 5),
        new VotingOption('Meh, it is okay!', 'ok', 10),
        new VotingOption('No, it sucks!', 'no', 15)
]);

А вот мой код BarChart:

<mx:BarChart x="9.1" y="8" id="barchart1" width="563.0303" height="454.01514" maxBarWidth="30" 
    type="overlaid" dataProvider="{optionsArray}" showAllDataTips="true">

    <mx:verticalAxis>
        <mx:CategoryAxis id="vertAxis" categoryField="optionSMSCode"/>
    </mx:verticalAxis>

    <mx:verticalAxisRenderers>
        <mx:AxisRenderer axis="{vertAxis}" showLabels="false"/>     
    </mx:verticalAxisRenderers>

    <mx:series>
        <mx:BarSeries xField="optionResult" showDataEffect="morph"/>
    </mx:series>
</mx:BarChart>  

person tomato    schedule 14.10.2009    source источник
comment
как временный патч .. почему бы просто не изменить сортировку массива?   -  person ethyreal    schedule 14.10.2009
comment
потому что есть другие вещи, которые полагаются на его первоначальный порядок. Диаграмма — единственное, что нуждается в обратном порядке. Если я вызову 'data.source.reverse()', я испорчу другие вещи. В качестве временного патча я создаю новый массив и назначаю ему обратный массив данных.   -  person tomato    schedule 15.10.2009


Ответы (2)


Вывод, который вы получаете, соответствует тому, как работают Flex BarCharts, и вы должны ожидать именно этого вывода. Исходная точка находится внизу_слева, поэтому такие объекты/списки начинаются снизу_слева и продолжаются наружу, вверх и вправо.
http://livedocs.adobe.com/flex/3/html/help.html?content=charts_types_03.html

Я визуально понимаю, как вы интерпретируете это наоборот. Допустим, кто-то дал вам этот dataProvider/ArrayCollection в таком порядке, но вы хотели визуализировать в обратном порядке. я бы либо 1)

//public var data:ArrayCollection;
data.source.reverse();

http://livedocs.adobe.com/flex/3/langref/Array.html

или 2)
перевернуть метки на вертикальной оси с помощью свойства AxisRenderer.labelFunction.
Flex : инвертирование значений LinearAxis

person Luis B    schedule 14.10.2009
comment
Большое спасибо за ответ. Полезно, что вы указали, что источник находится внизу слева. Я попытался переключить начало координат на top_left, надеясь, что это изменит порядок, поместив горизонтальную ось сверху. Но это все равно не сработало. Есть ли другие способы? Обратный порядок источника данных не работает для меня, потому что у меня есть другие вещи, зависящие от исходного порядка. Но спасибо за указание функции. Теперь я могу взломать его, чтобы вернуть новый перевернутый массив. Что касается переворота метки, я не мог придумать хорошего способа перевернуть мою категориальную ось, как они сделали с линейной осью (* -1). - person tomato; 15.10.2009

Решение простое. Создайте новый массив или коллекцию массивов (возможно, вам придется переопределить свойство dataProvider диаграммы), используя те же объекты, и отсортируйте их.

person Prashant Jain    schedule 13.01.2010