Apache flex 轴标签在弹性图表上的位置,以及如何相对于它们定位

Apache flex 轴标签在弹性图表上的位置,以及如何相对于它们定位,apache-flex,actionscript,flex-charting,Apache Flex,Actionscript,Flex Charting,我正在使用一个位于条形图右侧的AxisRenderer,并且正在寻找一种方法来定位AxisRenderer中位于其上方的值的标题 如何在轴渲染器中找到标签的位置?似乎AxisRenderer.width返回图表的宽度,AxisRenderer.x返回整个图表的边缘 下面是一张图片: Title xxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxx axis value xx

我正在使用一个位于条形图右侧的AxisRenderer,并且正在寻找一种方法来定位AxisRenderer中位于其上方的值的标题

如何在轴渲染器中找到标签的位置?似乎AxisRenderer.width返回图表的宽度,AxisRenderer.x返回整个图表的边缘

下面是一张图片:

                                Title
xxxxxxxxxxxxxxxxxxxxx   
xxxxxxxxxxxxxxxxxxxxx           axis value
xxxxxxxxxxxxxxxxxxxxx   

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  axis value
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  

xxxxxxxxx   
xxxxxxxxx                       axis value
xxxxxxxxx   

我试图将标题定位在AxisRenderer定位的“轴值”之上。基本上,对于非绝对定位的轴,如何确定其位置?

查看Adobe的数据标签教程:

这就是你想要的还是我误解了你的问题?

我个人不这么认为。您可能已经完成了这项工作,但不妨看看flex源代码,看看您能找到什么


否则,可能因为您知道图形上每个条的值和轴的比例。。。从理论上讲,你可以计算出你想要放置文本的位置?

我对这个问题做了一些深入的研究,我可能得出了与你相同的结论——没有简单的方法可以做到这一点。根据我的经验,AxisRenders在后台非常复杂(并且不是以一种特别容易理解的方式编写的)

然而,为了实现您想要实现的目标,您可以创建自己的IAxisRenderer来构建您想要的内容(这是一场噩梦……我已经做了,这很痛苦)。您还可以尝试扩展AxisRenderer,并尝试覆盖将其定位在内置TitlerRenderer中的特定方法(同样,这不是特别容易或干净,因为我认为AxisRenderer在构建时没有考虑扩展)

两个简单的解决方案将为您节省大量时间。硬编码标题在一个看起来合适的地方的位置。我想说,在大多数情况下,axis标签不会经常更改,尽管我显然是在做一个假设。在我看来,最简单的解决办法。。。改变设计。你可能要花相当多的时间才能得到你想要的标题。你需要问问自己,你从中获得的价值是否值得你付出的努力

对不起,我帮不了你了


J

在你的图表中使用Carthesis和Tacanvas查看这一点

<Chart>
    <mx:annotationElements>
        <mx:CartesianDataCanvas id="canvas" includeInRanges="true"/>
    </mx:annotationElements>
</Chart>


请参阅文档Adobe:->在图表中使用事件和效果->在图表控件上绘制

使用类似于上述建议的方法,我能够计算位于右侧的AxisRenderer所需的x和宽度。在我的例子中,我使用了网格线而不是Cartesianadacanvas,并且我还有一个左右垂直轴渲染器

将UPDATE_COMPLETE事件的事件侦听器添加到垂直轴渲染器。计算右轴渲染器的宽度:

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)

这不是我要找的。我想在不使用绝对大小的情况下将标题放置在数据标签上方。它必须是相对于AxisRenderer的位置。我保证它不在教程中。硬编码的解决方案实际上就是我最后要做的。我同意这很可能是最好的方法——我读了足够多的源代码,觉得没有其他方法了。是的,读源代码对我来说是一段悲伤的时光。不过,位置的计算起了作用。