我最近遇到了与此类似的问题,并提出了一个也适用于您的问题的解决方案。我有一个步骤 LineChart 并希望在用户悬停在线上的任何位置而不是仅在定义的数据点时显示数据提示。
您可以在此处阅读我为该问题编写的解决方案:Flex:在 LineChart 中自定义数据提示位置和行为
您必须稍微修改我的解决方案以适应您的问题:
在第 47 行,您可以删除Math.abs(last.y - mouseLoc.y) < 50
支票。这将数据提示限制在鼠标垂直方向 50 像素以内的行上。
我假设您使用的是默认分段折线图,它只是在数据点之间直接绘制线条。您需要修改在给定 x 坐标处计算线值的代码,以使用该图表类型。我已经在第 33-41 行找到了鼠标左侧最近的数据点并将其存储在last
. 只需获取下一个数据点(将是最靠近鼠标右侧的数据点)并使用类似这样的方法来获取鼠标处的值:
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 个错误,但总体思路就在那里。我希望也许这对某人仍然有用。这个问题已经很老了。:)