代码之家  ›  专栏  ›  技术社区  ›  Aethex

flex:反转Linearaxis值

  •  0
  • Aethex  · 技术社区  · 17 年前

    我有一个折线图,每隔一秒更新一次,类似于在Windows的任务管理器中看到的。图表从右到左,最新数据在右,然后向左。如何反转X轴的值,使最小值在右边,最大值在左边?这是一条直线。

    我试着将其设置为CategoryAxis并手动输入数字,但这并不符合它应该的方式(标签与刻度线不一致)。

    或者,是否有一种方法可以使类别中的标签与记号对齐?

    3 回复  |  直到 11 年前
        1
  •  3
  •   James Hay    17 年前

    所以我已经研究过了,我也看不到一个简单的翻转轴的方法。不过,我有一个非常好的解决方案,它相对优雅,因为它忽略了为您做这件事的属性。

    所以考虑一下这个从左到右的普通折线图(应该可以将它复制粘贴到一个项目中进行测试)。

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
        <mx:Script>
            <![CDATA[          
            import mx.collections.ArrayCollection;
    
            [Bindable]
            private var timeValue:ArrayCollection = new ArrayCollection( [
                { Time: 0, Value: 18 },
                { Time: 1, Value: 20 },
                { Time: 2, Value: 30 },
                { Time: 3, Value: 35 }, 
                { Time: 4, Value: 35 }, 
                { Time: 5, Value: 32 }, 
                { Time: 6, Value: 40 }, 
                { Time: 7, Value: 62 }, 
                { Time: 8, Value: 80 },
                { Time: 9, Value: 75 },
                { Time: 10, Value: 76 } ]);
            ]]>
        </mx:Script>
    
        <!-- Define custom colors for use as fills. -->
        <mx:SolidColor id="sc1" color="yellow" alpha=".8"/>
    
        <!-- Define custom Strokes for the columns. -->
        <mx:Stroke id="s1" color="yellow" weight="2"/>
    
        <mx:Panel title="ColumnChart and BarChart Controls Example" 
            height="100%" width="100%" layout="horizontal">
            <mx:LineChart id="column" 
                height="100%" 
                width="100%" 
                paddingLeft="5" 
                paddingRight="5" 
                showDataTips="true" 
                dataProvider="{timeValue}" >
    
                <mx:horizontalAxis>
                    <mx:LinearAxis maximum="10" minimum="0"/>
                </mx:horizontalAxis>
    
                <mx:verticalAxis>
                    <mx:LinearAxis maximum="100" minimum="0" />         
                </mx:verticalAxis>
    
                <mx:series>
                    <mx:LineSeries 
                        xField="Time" 
                        yField="Value" 
                        displayName="TimeValue"
                        fill="{sc1}"
                        stroke="{s1}"
                    />
                </mx:series>
            </mx:LineChart>
    
        </mx:Panel>
    </mx:Application>
    

    要将其更改为从右到左的图表,我会对时间值进行一些反转,使其为负值,然后沿使用负最小值和零作为最大值的轴绘制它们。然后,我还对标签运行一个函数,使它们再次为正,以适应原始数据源。

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
        <mx:Script>
            <![CDATA[
                import mx.charts.chartClasses.IAxisRenderer;          
                import mx.collections.ArrayCollection;
    
                [Bindable]
                private var timeValue:ArrayCollection = new ArrayCollection( [
                    { Time: 0, Value: 18 },
                    { Time: 1, Value: 20 },
                    { Time: 2, Value: 30 },
                    { Time: 3, Value: 35 }, 
                    { Time: 4, Value: 35 }, 
                    { Time: 5, Value: 32 }, 
                    { Time: 6, Value: 40 }, 
                    { Time: 7, Value: 62 }, 
                    { Time: 8, Value: 80 },
                    { Time: 9, Value: 75 },
                    { Time: 10, Value: 76 } ]);
    
                private function verticalAxisParseFunction(value : Number) : Number
                {
                    return value * -1;
                }
    
                private function horizontalAxisRenderedLabelFunction(axisRenderer:IAxisRenderer, label:String):String
                {
                    var labelAsNumber : Number = Number(label);
    
                    if (isNaN(labelAsNumber))
                    {
                        return label;
                    }
    
                    return (labelAsNumber * -1).toString();
                }
    
            ]]>
        </mx:Script>
    
        <!-- Define custom colors for use as fills. -->
        <mx:SolidColor id="sc1" color="yellow" alpha=".8"/>
    
        <!-- Define custom Strokes for the columns. -->
        <mx:Stroke id="s1" color="yellow" weight="2"/>
    
        <mx:Panel title="ColumnChart and BarChart Controls Example" 
            height="100%" width="100%" layout="horizontal">
            <mx:LineChart id="column" 
                height="100%" 
                width="100%" 
                paddingLeft="5" 
                paddingRight="5" 
                showDataTips="true" 
                dataProvider="{timeValue}" >
    
                <mx:horizontalAxis>
                    <mx:LinearAxis id="horizontalAxis" maximum="0" minimum="-10" parseFunction="{verticalAxisParseFunction}"/>
                </mx:horizontalAxis>
    
                <mx:verticalAxis>
                    <mx:LinearAxis id="verticalAxis" maximum="100" minimum="0" />           
                </mx:verticalAxis>
    
                <mx:horizontalAxisRenderers>
                    <mx:AxisRenderer
                        axis="{horizontalAxis}"
                        labelFunction="{horizontalAxisRenderedLabelFunction}" />
                </mx:horizontalAxisRenderers>
    
                <mx:verticalAxisRenderers>
                    <mx:AxisRenderer
                        axis="{verticalAxis}"
                        placement="right" />
                </mx:verticalAxisRenderers>
    
    
                <mx:series>
                    <mx:LineSeries 
                        xField="Time" 
                        yField="Value" 
                        displayName="TimeValue"
                        fill="{sc1}"
                        stroke="{s1}"
                    />
                </mx:series>
            </mx:LineChart>
    
        </mx:Panel>
    </mx:Application>
    
        2
  •  0
  •   kenneth    17 年前

    是否尝试反转数据提供程序的内容。

        3
  •  0
  •   darronschall    17 年前

    如何在图表中填充数据?如果按降序对进入图表的数据进行排序,则可以使其显示在左侧最高,右侧最低。

    推荐文章