JavaFX折れ線グラフは、プロット領域と軸で構成されます。軸のレンダリングはある程度の表示スペースを使用するため、折れ線グラフの原点の位置は(0、0)ではありません。折れ線グラフ自体の位置に対してこの位置を取得するにはどうすればよいですか?
折れ線グラフの位置に対するプロット領域内の点の位置を計算したいと思います。x軸とy軸のgetDisplayPosition
方法は、原点を基準にしてこれを提供しますが、原点の位置を取得する明確な方法がわかりません。
axis.getDisplayPosition(val)
val
メソッドは、プロット エリアの左上隅を基準とした、プロット エリア内の特定の軸のピクセル位置を提供します。getDisplayPosition() メソッドを使用して、折れ線グラフの原点に対する任意の点の位置を計算できます。これらのピクセルの位置は、折れ線グラフのサイズが変更されると変化することに注意してください。
@Override
public void start(Stage stage) {
stage.setTitle("Line Chart Sample");
//defining the axes
final NumberAxis xAxis = new NumberAxis();
final NumberAxis yAxis = new NumberAxis();
xAxis.setLabel("Number of Month");
//creating the chart
final LineChart<Number, Number> lineChart = new LineChart<Number, Number>(xAxis, yAxis);
lineChart.setTitle("Stock Monitoring, 2010");
//defining a series
XYChart.Series series = new XYChart.Series();
series.setName("My portfolio");
//populating the series with data
series.getData().add(new XYChart.Data(-1, 4));
series.getData().add(new XYChart.Data(0, 2));
series.getData().add(new XYChart.Data(1, -2));
series.getData().add(new XYChart.Data(5, 1));
Scene scene = new Scene(lineChart, 800, 400);
lineChart.getData().add(series);
System.out.println("");
stage.setScene(scene);
stage.show();
System.out.println("Points in linechart -> Pixel positions relative to the top-left corner of plot area: ");
System.out.println("(0,0) -> " + getFormatted(xAxis.getDisplayPosition(0), yAxis.getDisplayPosition(0)));
// Same as
// System.out.println("(0,0) " + getFormatted(xAxis.getZeroPosition(), yAxis.getZeroPosition()));
System.out.println("(-1,4) -> " + getFormatted(xAxis.getDisplayPosition(-1), yAxis.getDisplayPosition(4)));
System.out.println("(1,-2) -> " + getFormatted(xAxis.getDisplayPosition(1), yAxis.getDisplayPosition(-2)));
System.out.println("(-1.5,5) origin of plot area -> " + getFormatted(xAxis.getDisplayPosition(-1.5), yAxis.getDisplayPosition(5)));
System.out.println("Note: These pixel position values will change when the linechart's size is \n changed through window resizing for example.");
}
private String getFormatted(double x, double y) {
return "[" + "" + x + "," + y + "]";
}