2011-05-10 40 views
0

我有一個需要一些自定義標籤的酒吧堆積條形圖。每個酒吧都需要顯示標籤前面的酒吧值。爲了支持這一點,我爲BarChart中的各種BarSeries創建了一個自定義labelFunction(見下文)。Flex BarChart Stacked BarSeries labelFunction - Bar Count vs. Stacked Sum

該函數成功呈現標籤,但在堆疊條的情況下,標籤值不顯示我想要的內容。它不顯示欄的值,而是顯示棧中的欄的總和。例如,如果BarSet包含三個值爲3,4和5的小節,則標籤不會顯示爲「3」,「4」和「5」,而會顯示爲「3」,「7」和「12」 」。

this example看起來我可以通過爲每個BarSeries創建一個單獨的labelFunction並訪問特定屬性(例如data.item。@ fooCount)來實現我想要的結果。不過,如果可能的話,我寧願只有一個通用函數。是否有另一個屬性可以取代xNumber,使我獲得酒吧的特定價值而不是總和?

請注意,默認的標籤行爲(即不設置labelFunction)會顯示單個值,而不是總和......所以我假設這是可能的,希望沒有很多額外的箍環可以跳過。 :)

我自定義的labelFunction:

private function setCustomLabel(item:ChartItem, series:Series):String 
    { 

    var data:BarSeriesItem = BarSeriesItem(item); 
    var currentSeries:BarSeries = BarSeries(series); 

    return currentSeries.displayName + ": " + data.xNumber; 

    } 

一些BARCHART代碼片段:

<mx:BarChart id="myChart" showDataTips="true" 
       height="180" width="100%"> 

     ... 

     <mx:BarSet type="stacked"> 
     <mx:BarSeries displayName="Foo Count" xField="fooCount" 
         labelFunction="setCustomLabel" /> 
     <mx:BarSeries displayName="Bar Count" xField="barCount" 
         labelFunction="setCustomLabel" /> 
     </mx:BarSet> 

    </mx:series> 
    </mx:BarChart> 

謝謝!

回答

2

我相信你想要做的就是使用dataProvider。現在,你的xNumber將是堆積系列,而不是在未來的數據

所以,我會嘗試這樣的事情:

private function setCustomLabel(item:ChartItem, series:Series):String 
    { 

    var data:BarSeriesItem = BarSeriesItem(item); 
    var currentSeries:BarSeries = BarSeries(series); 

    return currentSeries.displayName + ": " + data.item[currentSeries.xField]; 

    } 

這不是測試,但我想你獲取原始數據而不是使用項目顯示的想法。

+0

截至目前,這_has_已經過測試,它的工作原理。正是我需要的。謝謝! – GoldDragonTSU 2011-05-11 15:38:49

+0

@J_A_X我真的很高興看到你的解決方案:)但我嘗試了同樣的事情,但它只是忽略了labelFunction並顯示了正常的工具提示。是否還有其他步驟(我已經創建了labelFunction並在每個BarSeries中設置了labelFunction屬性)? – Zesty 2012-02-05 12:39:35

+0

@J_A_X我也試着返回「測試」,並且被忽略 - 它仍然顯示BarChar的標準工具提示。 – Zesty 2012-02-05 12:42:00