JavaFX - 如何定位轴标签以避免与刻度线冲突

JavaFX - How to position the axis label to avoid conflicting with the tick marks

下面的代码是一个简单的折线图,其中 y 轴刻度标签的字符 length/width 很宽。默认定位的 yAxis 标签放置得太靠近 yAxis,这意味着文本与刻度线冲突。是否可以通过增加标签和轴之间的间隙来避免这种情况?

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;

public class Example extends Application {

    @Override
    public void start(Stage stage) {
        final NumberAxis xAxis = new NumberAxis(0, 10, 2);
        final NumberAxis yAxis = new NumberAxis(1.3378, 1.3390, 0.0001);
        xAxis.setLabel("xAxis");
        yAxis.setLabel("yAxis");
        yAxis.setTickLabelFormatter(new NumberAxis.DefaultFormatter(yAxis){
            @Override public String toString(Number object){
                return String.format("%1.4f", object); }
        });

        final LineChart<Number, Number> lineChart = new LineChart<Number, Number>(xAxis, yAxis);
        XYChart.Series series = new XYChart.Series();

        final XYChart.Data d1 = new XYChart.Data(0.0,1.3379);
        final XYChart.Data d2 = new XYChart.Data(2.0,1.3387);
        final XYChart.Data d3 = new XYChart.Data(2.5,1.3385);
        final XYChart.Data d4 = new XYChart.Data(3.5,1.3387);
        final XYChart.Data d5 = new XYChart.Data(8.0,1.3378);
        final XYChart.Data d6 = new XYChart.Data(9.5,1.3388);

        series.getData().addAll(d1, d2, d3, d4, d5, d6);
        lineChart.getData().add(series);
        lineChart.setLegendVisible(false);

        final Scene scene = new Scene(lineChart, 400, 300);
        stage.setScene(scene);
        stage.show();
    }


    public static void main(String[] args) {
        launch(args);
    }
}

我认为无法重新定位 "yAxis" 标签或增加间距,但您可能希望使用以下解决方法来避免文本冲突:

lineChart.getYAxis().setTickLabelRotation(-90);

你会得到如下图表:

可以定位轴的标签。

例如要将标签 10 像素向左移动,只需使用:

lineChart.getYAxis()
       .lookup(".axis-label")
       .setStyle("-fx-label-padding: -10 0 0 0;");