Flex BarChart Stacked BarSeries labelFunction - Bar Count与Stacked Sum

时间:2011-05-10 21:36:23

标签: flex actionscript

我有一个带有条形的堆积条形图,需要一些自定义标签。每个栏需要显示标签前面的栏值。为了支持这一点,我为BarChart中的各种BarSeries创建了一个自定义labelFunction(见下文)。

该功能成功渲染标签,但在堆叠条形图的情况下,标签值未显示我想要的内容。它不显示条形值,而是显示堆栈中条形的总和。例如,如果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>

谢谢!

1 个答案:

答案 0 :(得分: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];

  }

这未经过测试,但我认为您可以获取原始数据,而不是使用项目显示的内容。