我在Adobe Flash Builder 4.5中制作了一个甜甜圈饼图,在鼠标悬停期间显示每个扇区的工具提示。我想知道应用程序是如何计算和显示每个扇区的百分比的,即使我只是在数组集合中提供值,而下面给出的代码中没有使用公式。
请帮帮忙
我的完整代码..
<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2007/10/13/creating-donut-shaped-pie-charts-using-the-innerradius-style/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
verticalAlign="middle"
backgroundColor="white">
<mx:Script>
<![CDATA[
private function labelFunc(item:Object, field:String, index:Number, percentValue:Number):String {
return item.name + ": " + '\n' + "AVG: " + item.avg;
}
]]>
</mx:Script>
<mx:ArrayCollection id="arrColl">
<mx:source>
<mx:Array>
<mx:Object name="R Winn" obp=".353" slg=".445" avg=".300" />
<mx:Object name="P Feliz" obp=".290" slg=".418" avg=".253" />
<mx:Object name="O Vizquel" obp=".305" slg=".316" avg=".246" />
<mx:Object name="B Molina" obp=".298" slg=".433" avg=".276" />
<mx:Object name="R Durham" obp=".295" slg=".343" avg=".218" />
</mx:Array>
</mx:source>
</mx:ArrayCollection>
<mx:PieChart id="chart"
height="100%"
width="100%"
innerRadius="0.5"
showDataTips="true"
dataProvider="{arrColl}" >
<mx:series>
<mx:PieSeries labelPosition="callout"
field="avg"
labelFunction="labelFunc">
<mx:calloutStroke>
<mx:Stroke weight="0"
color="0x888888"
alpha="100"/>
</mx:calloutStroke>
<mx:radialStroke>
<mx:Stroke weight="0"
color="#FFFFFF"
alpha="20"/>
</mx:radialStroke>
<mx:stroke>
<mx:Stroke color="0"
alpha="20"
weight="2"/>
</mx:stroke>
</mx:PieSeries>
</mx:series>
</mx:PieChart>
</mx:Application>
这是输出的屏幕截图,即饼图
我想知道值23.2%是如何显示为橙子扇区的工具提示,即使我没有在代码中的任何地方编写它..如果调用sdk的任何函数来计算百分比,那么它在哪里?
2条答案
按热度按时间kkih6yb81#
你说的完全正确- Flex已经为你做了这件事。我自己也在做类似的事情,所以很抱歉necropost。这需要快速浏览SDK,特别是PieSeries.as,
updateMapping
函数中的第1772行,其中设置了percentValue
属性。_renderData
可以通过调用在第468行找到的系列的items
属性来访问。因此,如果您想知道PieSeries中索引为3的项目所占的百分比,您可以执行以下操作:
tkclm6bt2#
您不需要自定义公式来计算此百分比,这是一个标准计算,饼图必须执行此计算,以便给予每个值的饼图大小。
当你在
chart
对象上设置field
和dataProvider
时,所有需要的信息都被提供了。虽然我不能提供这里运行的确切代码,但它是一个简单的近似值:请注意,这是一个伪代码,饼图将比这更优化,并将做聪明的事情(如使用
row.valueOf()
,如果field == undefined
等)。至于为什么显示在这里,这将是工具提示渲染器的一部分,您可以看到您的自定义
labelFunc
正在处理图表中的线条