为什么flex DateTimeAxis会在轴上创建重复的月份?

时间:2009-11-17 16:25:07

标签: flex charts

我正在使用Flex DateTimeAxis。我有一个场景,DateTimeAxis有时会在Axis上创建重复的月份。月份标签单元是根据提供给DateTimeAxis的最小/最大值生成的,据我所知,它不是由系列数据生成的。换句话说,复制在提供给图表的数据中不存在,但是是自动标签生成过程的一部分,DateTimeAxis将在为轴提供最小/最大值时执行。

我在下面列出了此问题的简化示例。任何帮助表示赞赏。

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

<mx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;

        [Bindable] 
        public var stockDataAC:ArrayCollection = new ArrayCollection( [
            {date: new Date(2009,4), close: 41.71},
            {date: new Date(2009,5),close: 42.21},
            {date: new Date(2009,6), close: 42.11},
            {date: new Date(2009,7), close: 42.71},
            {date: new Date(2009,9), close: 42.99}
            ]);

        [Bindable] private var min:Date = new Date(2009,4);
        [Bindable]  private var max:Date = new Date(2010,3);

        private function formatDate(value:Date,previousValue:Date,axis:DateTimeAxis):String {               
            var dateLabel:String = df.format(value);

            return dateLabel;
        }
    ]]>
</mx:Script>

<mx:DateFormatter id="df" formatString="MMM YY"/>
<mx:Panel title="DateTimeAxis Example" height="100%" width="100%">

    <mx:LineChart id="mychart" height="100%" width="100%"
        paddingRight="5" paddingLeft="5" 
        showDataTips="true" dataProvider="{stockDataAC}">

        <mx:horizontalAxis>
            <mx:DateTimeAxis dataUnits="months" labelUnits="months" alignLabelsToUnits="false" labelFunction="formatDate" minimum="{min}" maximum="{max}"/>
        </mx:horizontalAxis>

        <mx:verticalAxis>
            <mx:LinearAxis baseAtZero="false" />
        </mx:verticalAxis>

        <mx:series>
            <mx:LineSeries yField="close" xField="date" displayName="AAPL"/>
        </mx:series>
    </mx:LineChart>

</mx:Panel>

1 个答案:

答案 0 :(得分:1)

问题似乎在formatDate函数中。

试试这个:

private function formatDate(value:Date,previousValue:Date,axis:DateTimeAxis):String 
    {   
        trace("Current Value: " + value);            
        trace("Previous Value: " +previousValue);   
        trace("****");         
        var dateLabel:String = df.format(value);
        return dateLabel;
    }

并且您将能够在输出中看到由于某种原因日期具有不同的GMT,这导致格式化问题:

Current Value: Sun Nov 1 00:00:00 GMT-0400 2009
Previous Value: Thu Oct 1 00:00:00 GMT-0400 2009
****
Current Value: Mon Nov 30 23:00:00 GMT-0500 2009
Previous Value: Sun Nov 1 00:00:00 GMT-0400 2009
****

希望这有帮助,