簡體   English   中英

如何在JFreeChart散點圖中找到距鼠標最近的點?

[英]How to find the nearest point to the mouse in a JFreeChart scatter plot?

我需要能夠獲取一個從MouseListener返回的點,並標識散點圖中的最近點。 我正在將JFreeChart與XYDataset一起使用。

我在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報告的是相對於ChartPanel左上角的點,因此(0,0)在標題上方,在x軸標簽的左側。 但是,valueToJava2D方法提供相對於繪制值的區域的值,因此(0,0)在圖形標題下方和x軸標簽的右側。 這意味着當鼠標直接位於我的數據點之一上方時,我得到的非零差異!

我該如何解決這種差異?

謝謝,埃里克

我將看一下這里此處說明的ChartMouseListener

如果這還不夠,則可能必須查看軸,該軸的面積和邊緣有意義。

這可能有助於解釋目標,而不是您當前的方法。 或者,編輯您的問題以包括顯示您當前方法的sscce 這里可以找到許多簡短的例子。

附錄: 最大點數的實際限制很小。

對於合理數量的點,可以放大Shape ,如此此處所示; 另請參見ShapeUtilities 要指出細節,請考慮在此處檢查的自定義工具提示生成器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM