FLEX:使LineChart DATATIP约束到垂直轴

时间:2009-02-28 00:16:36

标签: flex actionscript-3 charts linechart

制作折线图时,让我们说它用于不同部门的商业销售,横向是天,垂直是美元。当您将鼠标悬停在一条线上时,它会告诉您dataTip会告诉您该部门的销售情况。在那一天。我希望它同时显示所有的depts,所以说你在第3天悬停,我想要显示第3天所有depts的dataTips,这样你就可以比较同一天所有销售的价值。我将dataTips的mouseSensitivity设置为一次显示所有行,但我最终得到一个部门的第2天和第3天的另一个不需要的部分。这实际上是作为错误发布的,并在此处更好地解释:http://bugs.adobe.com/jira/browse/FLEXDMV-1853

我想知道是否有人可以为此做出解决方案?

谢谢!

3 个答案:

答案 0 :(得分:2)

我最近遇到了类似的问题,并提出了一个也适用于您的问题的解决方案。我有一个LineChart步骤,当用户在线路上的任何地方悬停而不是仅仅在定义的数据点时,我想显示数据提示。

您可以在此处阅读我为该问题撰写的解决方案:Flex: Customizing data tip location and behavior in a LineChart

您必须稍微修改我的解决方案才能解决您的问题:

在第47行,您可以删除Math.abs(last.y - mouseLoc.y) < 50支票。这会将数据提示限制在鼠标垂直50像素范围内的行。

我假设你正在使用默认的折线图,它只是在数据点之间直接绘制线条。您需要修改计算给定x坐标的线值的代码以使用该图表类型。我已经找到了最靠近鼠标左侧的数据点33-41,并将其存储在last中。只需获取下一个数据点(最接近鼠标的 right )并使用类似的东西获取鼠标值:

var slope:Number = (nextPoint.y - last.y) / (nextPoint.x - last.x);
var lineYAtMouse:Number = (slope * (last.x - mouseLoc.x)) + last.y;
var lineValue:Array = line.localToData(new Point(mouseLoc.x, lineYAtMouse));

然后将第69行到第72行替换为:

hitPoint.x = mouseLoc.x;
hitPoint.y = lineYAtMouse;
hitPoint.xValue = lineValue[0];
hitPoint.yValue = lineValue[1];

我没有对这些修改进行测试,因此可能存在错误或2,但总的想法是存在的。我希望这可能对某人有用。这个问题变得越来越老了。 :)

答案 1 :(得分:0)

不是答案,而是一个糟糕的选择:

您可以创建自己的DataTip渲染器,[ahem]映射每个点的位置,并为每个点绘制提示。

基本上,你会复制图表类中的很多代码。

答案 2 :(得分:0)

我遇到了同样的问题但是在柱形图上工作。我以为我可以使用backgroundElements启用垂直gridLines,然后为鼠标悬停添加一个图表事件监听器(当鼠标经过垂直网格线时会触发)。使用localX值,我可以将它与最近的数据点进行比较,也许。

布赖恩