我有一個折線圖,每隔幾秒鐘更新一次,與您在Windows任務管理器中看到的類似。圖表從右到左,最新的數據在右側,向左。我如何反轉X軸的值,使最低值在右邊,最高在左邊?這是一個LinearAxis。Flex:反轉LinearAxis值
我試着讓它成爲一個CategoryAxis,並且手動輸入數字,但是這並不是它應該的方式(標籤與ticks不一致)。
或者,有沒有辦法讓CategoryAxis中的標籤與ticks一致?
我有一個折線圖,每隔幾秒鐘更新一次,與您在Windows任務管理器中看到的類似。圖表從右到左,最新的數據在右側,向左。我如何反轉X軸的值,使最低值在右邊,最高在左邊?這是一個LinearAxis。Flex:反轉LinearAxis值
我試着讓它成爲一個CategoryAxis,並且手動輸入數字,但是這並不是它應該的方式(標籤與ticks不一致)。
或者,有沒有辦法讓CategoryAxis中的標籤與ticks一致?
所以我研究過它,我也看不到一個簡單的翻轉軸的方法。不過,我確實有一個解決方案,可以很好地工作,並且相對優雅,可以省略一個屬性來爲您做這件事。
因此,考慮這個正常的從左到右的折線圖(應該能夠將其複製並粘貼到要測試的項目中)。
<?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>
您是否嘗試過顛倒您dataprovider的內容。
你如何填充圖表中的數據?如果您按照降序對數據進行排序,則可以使其顯示爲左側最高,右側最低。
而我將如何...有沒有一個選項,或者我必須手動執行它? – Aethex 2009-05-26 20:08:53
使用過濾器或只是手動執行。創建一個新的arraycollection(或者你的DP是什麼)。然後從頭到尾循環遍歷它)。說一些像(var i:int =(AC.length -1); i> = 0; i - ){填充新的AC}。 希望有道理。 – kenneth 2009-05-27 08:26:41
是的,但LinearAxis沒有數據提供者。我之前已經嘗試過使用CategoryAxis,但對摺線圖來說它不太好。 – Aethex 2009-05-29 22:10:01