2

我正在使用位于 BarChart 右侧的 AxisRenderer,并且正在寻找一种方法来为 AxisRenderer 中的值在它们上方定位标题。

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

这是一张图片的尝试:

                                Title
xxxxxxxxxxxxxxxxxxxxx   
xxxxxxxxxxxxxxxxxxxxx           axis value
xxxxxxxxxxxxxxxxxxxxx   

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  axis value
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  

xxxxxxxxx   
xxxxxxxxx                       axis value
xxxxxxxxx   

我试图将标题定位在 AxisRenderer 定位的“轴值”之上。基本上,对于一个非绝对定位的轴,你如何确定它在哪里?

4

5 回答 5

3

我已经对这个问题进行了一些深入的研究,并且我可能得出了与您相同的结论-没有简单的方法可以做到这一点。根据我的经验,AxisRenderers 的底层非常复杂(并且没有以特别容易理解的方式编写)。

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

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

对不起,我不能再帮忙了。

Ĵ

于 2009-07-21T08:28:14.670 回答
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);

于 2010-03-09T21:16:36.517 回答
1

就个人而言,我没有flex-charting 的来源。你可能已经这样做了,但也许看看 flex 源代码,看看你能弄清楚什么?

否则,也许因为你知道图表上每个条的值和轴的比例......你理论上可以计算你想要放置文本的位置?

于 2009-07-20T21:54:17.800 回答
1

在图表中使用 CarthesianDataCanvas 进行调查。

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

请参阅 Adob​​e 文档: http://livedocs.adobe.com/flex/3/html/help.html?content= charts_types_06.html -> 在图表中使用事件和效果 -> 在图表控件上绘图

于 2010-02-05T11:47:08.513 回答
0

查看 Adob​​e 的数据标签教程:

向图表添加数据标签

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

于 2009-07-17T19:52:17.057 回答