Динамически создавать оси с помощью ActionScript в библиотеке гибких диаграмм Adobe; Adobe Bug? - PullRequest
2 голосов
/ 21 марта 2011

Создание нескольких осей через MXML работает отлично: http://livedocs.adobe.com/flex/3/html/help.html?content=charts_types_12.html

Но когда я пытаюсь динамически создать горизонтальную и вертикальную оси, я получаю дополнительные оси. Я считаю, что это ошибка Adobe. Как я могу исправить это поведение? Спасибо.

enter image description here

<?xml version="1.0" encoding="utf-8"?>
<s:Application 
    minHeight="600"
    minWidth="955"
    creationComplete="application1_creationCompleteHandler(event)"
    xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark"
    xmlns:mx="library://ns.adobe.com/flex/mx">
    <fx:Script>
        <![CDATA[
            import mx.charts.AxisRenderer;
            import mx.charts.LinearAxis;
            import mx.charts.series.ColumnSeries;
            import mx.charts.series.LineSeries;
            import mx.collections.ArrayCollection;
            import mx.events.FlexEvent;

            [Bindable] public var SMITH:ArrayCollection = new ArrayCollection([{date:"22-Aug-05", close:41.87},
                                                                               {date:"23-Aug-05", close:45.74},
                                                                               {date:"24-Aug-05", close:42.77},
                                                                               {date:"25-Aug-05", close:48.06},]);

            [Bindable] public var DECKER:ArrayCollection = new ArrayCollection([{date:"22-Aug-05", close:157.59},
                                                                                {date:"23-Aug-05", close:160.3},
                                                                                {date:"24-Aug-05", close:150.71},
                                                                                {date:"25-Aug-05", close:156.88},]);

            protected function application1_creationCompleteHandler(event:FlexEvent):void
            {
                // VERTICAL AXIS
                var verticalAxis1:LinearAxis = new LinearAxis();
                var verticalAxis2:LinearAxis = new LinearAxis();

                var verticalAxisRenderer1:AxisRenderer = new AxisRenderer();
                var verticalAxisRenderer2:AxisRenderer = new AxisRenderer();

                verticalAxisRenderer1.axis = verticalAxis1;
                verticalAxisRenderer2.axis = verticalAxis2;

                // HORIZONTAL AXIS

                var horizontalAxis:LinearAxis = new LinearAxis();
                var horizontalAxisRenderer:AxisRenderer = new AxisRenderer();
                horizontalAxisRenderer.axis = horizontalAxis;
                horizontalAxisRenderer.placement = "bottom";

                // SERIES

                var newSeries:Array = new Array();

                var columnSeries:ColumnSeries = new ColumnSeries();
                columnSeries.dataProvider = SMITH;
                columnSeries.yField = "close";
                columnSeries.verticalAxis = verticalAxis1;
                columnSeries.displayName = "SMITH";
                newSeries.push(columnSeries);

                var lineSeries:LineSeries = new LineSeries();
                lineSeries.dataProvider = DECKER;
                lineSeries.yField = "close";
                lineSeries.verticalAxis = verticalAxis2;
                lineSeries.displayName = "DECKER";
                newSeries.push(lineSeries);

                // CHART

                myChart.verticalAxisRenderers = [verticalAxisRenderer1, verticalAxisRenderer2];
                myChart.horizontalAxisRenderers = [horizontalAxisRenderer];
                myChart.series = newSeries;
            }
        ]]>
    </fx:Script>

    <mx:Panel title="Column Chart With Multiple Axes">
        <mx:ColumnChart id="myChart"
            showDataTips="true"/>
        <mx:Legend dataProvider="{myChart}"/>
    </mx:Panel>
</s:Application>

Ответы [ 4 ]

3 голосов
/ 23 октября 2012

Хорошо, вот трюк.Не создавайте диаграмму в MXML.Создайте его в коде AS, как вы сделали с рендерерамиДиаграмма добавляет AxisRenderer по умолчанию в свой метод commitProperties ().Таким образом, если вы создадите диаграмму в mxml, она выполнит фиксацию (и, следовательно, добавит средство визуализации осей), прежде чем вы добавите свое средство визуализации осей в коде AS.Просто переместите создание диаграммы в код AS и из MXML:

var columnChart: ColumnChart = new ColumnChart ();addElement (columnChart)

Удачи!

0 голосов
/ 15 февраля 2013

Мои 2 цента здесь ....

Я попытался решить эту проблему с помощью обнуления verticalAxisRenderer и установки осевых разрядов в verticalAxisRenderers . Это вызвало проблему, так как установщик verticalAxisRenderer не проверяет, является ли значение null , перед тем как обработать ось объект от него. Я остановился на приведенном ниже коде. Не элегантно, но работает ..

if(myChart.verticalAxisRenderer)
{
    myChart.verticalAxisRenderer  = verticalAxisRenderer2
    myChart.verticalAxisRenderers = [verticalAxisRenderer1];
}
else
{
    myChart.verticalAxisRenderers = [verticalAxisRenderer2,verticalAxisRenderer1];
}
0 голосов
/ 23 марта 2011

HorizontalAxisRenderer.axis = HorizontalAxis;

myChart.horizontAxisRenderers = [horizontalAxisRenderer];

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

0 голосов
/ 21 марта 2011

Если вы посмотрите на свой код немного ближе, вы заметите, что добавляете средства визуализации осей дважды. Один раз на серии данных, а другой на самой диаграмме.

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