如何在 JFreeChart 散点图中查找离鼠标最近的点



我需要能够获取从鼠标侦听器返回的点,并识别散点图中最近的点。 我正在使用带有XYDataset的JFreeChart。

我已经在我的 ChartPanel 中添加了一个鼠标侦听器,并尝试将这些 x,y 值与我遍历数据并检查其位置时返回的值进行比较。 我的代码看起来像这样:

ValueAxis domainAxis = chartPanel.getXYPlot().getDomainAxis();
ChartArea chartArea = chartPanel.getChartRenderingInfo().getChartArea();
for(int i=0; i < myXYData.getItemCount(0); i++) {
    double mouseX = e.getX(); // e is the MouseEvent
    double pointX = domainAxis.valueToJava2D(myXYData.getX(0, i), chartArea, RectangleEdge.BOTTOM);
    System.out.println("difference is " + (pointX - mouseX));
}

问题是 MouseEvent 是相对于图表面板左上角的报告点,因此 (0,0) 位于标题上方和 x 轴标签的左侧。 但是,valueToJava2D 方法给出的值相对于绘制值的区域,因此 (0,0) 位于图形标题下方和 x 轴标签的右侧。 这意味着当鼠标直接在我的一个数据点上时,我得到一个非零的差异!

如何解决这种差异?

谢谢埃里克

我会看一个ChartMouseListener,在这里和这里说明。

如果这还不够,您可能必须查看轴,其中区域和边缘具有意义。

它可能有助于解释目标,而不是您当前的方法。或者,编辑您的问题以包含显示您当前方法的 sscce。可以在这里找到许多简短的例子。

附录:最大 # 点的实际限制非常小。

对于合理的点数,您可以放大Shape,如此处和此处所示;另请参阅ShapeUtilities。若要标注详细信息,请考虑此处检查的自定义工具提示生成器。

相关内容

  • 没有找到相关文章

最新更新