我正在使用位于BarChart右侧的AxisRenderer,并且正在寻找一种方法来为它们上方的AxisRenderer中的值定位标题。
如何在轴渲染器中找到标签的位置?似乎AxisRenderer.width返回图表的宽度,AxisRenderer.x返回整个图表的边缘。
以下是对图片的尝试:
Title
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx axis value
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx axis value
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxx
xxxxxxxxx axis value
xxxxxxxxx
我正在尝试将标题置于AxisRenderer定位的“轴值”之上。基本上,对于非绝对定位的轴,您如何确定它的位置?
答案 0 :(得分:3)
我已经对这个问题进行了一些挖掘,我可能得出了相同的结论 - 没有简单的方法可以做到这一点。根据我的经验,AxisRenderers在引擎盖下非常复杂(并没有以特别可理解的方式编写)。
然而,要实现你想要实现的目标,你可以创建自己的IAxisRenderer来构建你想要的东西(这是一场噩梦......我已经完成了它并且很痛苦)。您还可以尝试扩展AxisRenderer并尝试覆盖在构建的titleRenderer中定位它的特定方法(同样,这不是特别容易或干净,因为在我看来AxisRenderer没有考虑到扩展而构建)。
两种简单的解决方案可以为您节省大量时间。在一个看起来不错的地方硬编码标题的位置。我会说在大多数情况下轴标签不会经常改变,尽管显然我在那里做出假设。在我看来,最简单的解决方案......改变设计。您可能需要花费相当多的时间才能完全按照自己的意愿获得标题。你需要问问自己,你从中获得的价值是否值得你投入的努力。
抱歉,我无法再提供任何帮助了。
Ĵ
答案 1 :(得分:2)
使用类似于上述建议的东西,我能够计算出位于右侧的AxisRenderer所需的x和宽度。在我的例子中,我使用GridLines而不是CartesianDataCanvas,我也有左右垂直的AxisRenderer。
将UPDATE_COMPLETE事件的事件侦听器添加到垂直AxisRenderers。计算右AxisRenderer的宽度:
var rightGutterWidth:Number = chart.width - gridLines.width - Math.abs(leftAxisRenderer.gutters.width);
对于你的X标签位置,你可以做类似的事情:
var rightGutterX:Number = chart.x + gridLines.width + Math.abs(leftAxisRenderer.gutters.width);
答案 2 :(得分:1)
就个人而言,我不have the source to flex-charting。你可能已经完成了这个,但是可以看一下flex源,看看你能搞清楚什么?
否则,也许你知道图表上每个条形的值和轴的比例......理论上你可以计算你想要放置文本的位置吗?
答案 3 :(得分:1)
使用CarthesianDataCanvas查看图表。
<Chart>
<mx:annotationElements>
<mx:CartesianDataCanvas id="canvas" includeInRanges="true"/>
</mx:annotationElements>
</Chart>
参见文档Adobe:http://livedocs.adobe.com/flex/3/html/help.html?content=charts_types_06.html - &gt;在图表中使用事件和效果 - &gt;绘制图表控件
答案 4 :(得分:0)