我有一个带有条形的堆积条形图,需要一些自定义标签。每个栏需要显示标签前面的栏值。为了支持这一点,我为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>
谢谢!
答案 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];
}
这未经过测试,但我认为您可以获取原始数据,而不是使用项目显示的内容。