Charts 如何确定折线图原点的像素位置?

Charts 如何确定折线图原点的像素位置?,charts,javafx-2,linechart,Charts,Javafx 2,Linechart,JavaFX折线图由绘图区域和轴组成。由于轴渲染使用一些显示空间,因此折线图中原点的位置不是(0,0)。如何获得相对于折线图自身位置的该位置 我想计算绘图区域中一个点相对于折线图位置的位置。x轴和y轴的getDisplayPosition方法提供了相对于原点的这一点,但我看不到获得原点位置的明显方法。轴。getDisplayPosition(val)方法提供了相对于绘图区域左上角的绘图区域中给定轴的val的像素位置。可以使用getDisplayPosition()方法计算任意点相对于折线图原点的

JavaFX折线图由绘图区域和轴组成。由于轴渲染使用一些显示空间,因此折线图中原点的位置不是(0,0)。如何获得相对于折线图自身位置的该位置


我想计算绘图区域中一个点相对于折线图位置的位置。x轴和y轴的
getDisplayPosition
方法提供了相对于原点的这一点,但我看不到获得原点位置的明显方法。

轴。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 + "]";
}
@覆盖
公众假期开始(阶段){
阶段。设置标题(“折线图样本”);
//定义轴
最终数字axis xAxis=新数字axis();
最终数字axis yAxis=新数字axis();
xAxis.setLabel(“月数”);
//创建图表
最终线形图线形图=新线形图(xAxis,yAxis);
线形图.setTitle(“库存监控,2010年”);
//定义系列
XYChart.Series系列=新的XYChart.Series();
series.setName(“我的投资组合”);
//用数据填充序列
series.getData().add(新的XYChart.Data(-1,4));
series.getData().add(新的XYChart.Data(0,2));
series.getData().add(新的XYChart.Data(1,-2));
series.getData().add(新的XYChart.Data(5,1));
场景=新场景(线条图,800400);
lineChart.getData().add(系列);
System.out.println(“”);
舞台场景;
stage.show();
System.out.println(“线条图中的点->相对于绘图区域左上角的像素位置:”;
System.out.println(“(0,0)->”+getFormatted(xAxis.getDisplayPosition(0),yAxis.getDisplayPosition(0));
//同
//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)绘图区原点->”+getFormatted(xAxis.getDisplayPosition(-1.5),yAxis.getDisplayPosition(5));
System.out.println(“注意:这些像素位置值将在线条图的大小\n通过窗口大小调整而改变时改变。”);
}
私有字符串getFormatted(双x,双y){
返回“[”+“”+x+”,“+y+”];
}

轴。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 + "]";
}
@覆盖
公众假期开始(阶段){
阶段。设置标题(“折线图样本”);
//定义轴
最终数字axis xAxis=新数字axis();
最终数字axis yAxis=新数字axis();
xAxis.setLabel(“月数”);
//创建图表
最终线形图线形图=新线形图(xAxis,yAxis);
线形图.setTitle(“库存监控,2010年”);
//定义系列
XYChart.Series系列=新的XYChart.Series();
series.setName(“我的投资组合”);
//用数据填充序列
series.getData().add(新的XYChart.Data(-1,4));
series.getData().add(新的XYChart.Data(0,2));
series.getData().add(新的XYChart.Data(1,-2));
series.getData().add(新的XYChart.Data(5,1));
场景=新场景(线条图,800400);
lineChart.getData().add(系列);
System.out.println(“”);
舞台场景;
stage.show();
System.out.println(“线条图中的点->相对于绘图区域左上角的像素位置:”;
System.out.println(“(0,0)->”+getFormatted(xAxis.getDisplayPosition(0),yAxis.getDisplayPosition(0));
//同
//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)绘图区原点->”+getFormatted(xAxis.getDisplayPosition(-1.5),yAxis.getDisplayPosition(5));
System.out.println(“注意:这些像素位置值将在线条图的大小\n通过窗口大小调整而改变时改变。”);
}
私有字符串getFormatted(双x,双y){
返回“[”+“”+x+”,“+y+”];
}

观察的更好方法是通过
图表获得绘图区域。如下所示的查找
命令:

//gets the display region of the chart
Node chartPlotArea = chart.lookup(".chart-plot-background");
double chartZeroX = chartPlotArea.getLayoutX();
double chartZeroY = chartPlotArea.getLayoutY();

更好的观察方法是通过
图表获得绘图区域。查找
命令如下:

//gets the display region of the chart
Node chartPlotArea = chart.lookup(".chart-plot-background");
double chartZeroX = chartPlotArea.getLayoutX();
double chartZeroY = chartPlotArea.getLayoutY();

您是如何确定(-1.5,5)是绘图区域的原点的?@b3。通过观察。我确定在我的系统环境中,对于给定的窗口大小(800x400)和给定的数据系列值,渲染的x轴最小值等于-1.5,y轴最大值等于5。调整窗口大小或更改数据系列时,这些值会发生变化。您如何确定(-1.5,5)是绘图区域的原点?@b3。通过观察。我确定在我的系统环境中,对于给定的窗口大小(800x400)和给定的数据系列值,渲染的x轴最小值等于-1.5,y轴最大值等于5。当窗口为r时,这些值会更改