2011-05-10 134 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