Почему моя ось LineChart не удается отсортировать?

У меня есть экземпляр LineChart для отображения информации в линейном графике, но он не может правильно отсортировать ось X.

public class Main extends Application {

@Override public void start(Stage stage) {

    stage.setTitle("Line Chart Sample");
    final CategoryAxis xAxis = new CategoryAxis();
    final NumberAxis yAxis = new NumberAxis();
    xAxis.setLabel("Month");
    final LineChart<String,Number> lineChart =
            new LineChart<String,Number>(xAxis,yAxis);

    lineChart.setTitle("Stock Monitoring, 2010");

    XYChart.Series series1 = new XYChart.Series();
    series1.setName("Portfolio 1");

    series1.getData().add(new XYChart.Data("4", 12.15));
    series1.getData().add(new XYChart.Data("7", 11.25));
    series1.getData().add(new XYChart.Data("10", 3.00));
    series1.getData().add(new XYChart.Data("14", 1.60));
    series1.getData().add(new XYChart.Data("19", 1.05));
    series1.getData().add(new XYChart.Data("25", 26.30));
    series1.getData().add(new XYChart.Data("26", 7.50));
    series1.getData().add(new XYChart.Data("27", 4.05));
    series1.getData().add(new XYChart.Data("28", 4.00));

    XYChart.Series series2 = new XYChart.Series();
    series2.setName("Portfolio 2");
    series2.getData().add(new XYChart.Data("7", 21.75));
    series2.getData().add(new XYChart.Data("28", 13.20));

    XYChart.Series series3 = new XYChart.Series();
    series3.setName("Portfolio 3");
    series3.getData().add(new XYChart.Data("2", 5.60));
    series3.getData().add(new XYChart.Data("3", 7.70));
    series3.getData().add(new XYChart.Data("10", 25.85));
    series3.getData().add(new XYChart.Data("19", 6.00));
    series3.getData().add(new XYChart.Data("28", 4.85));
    series3.getData().add(new XYChart.Data("29", 0.80));

    XYChart.Series series4 = new XYChart.Series();
    series4.setName("Portfolio 4");
    series4.getData().add(new XYChart.Data("9", 6.35));
    series4.getData().add(new XYChart.Data("11", 3.20));
    series4.getData().add(new XYChart.Data("19", 6.45));
    series4.getData().add(new XYChart.Data("28", 6.00));
    series4.getData().add(new XYChart.Data("29", 4.00));

    Scene scene  = new Scene(lineChart,800,600);
    lineChart.getData().addAll(series1, series2, series3, series4);

    stage.setScene(scene);
    stage.show();
}


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

Но что-то не так с порядком оси X. Это отсортировано совершенно неправильно. Смотрите результат: введите описание изображения здесь

По сути, если только одно значение из оси y соответствует значению x, оно будет отображаться в неправильной позиции. Отладчик показывает мне, что данные добавляются в ожидаемом порядке.

Кстати, каждый из этих графиков может отображаться корректно в случае удаления всех остальных графиков.

1 ответ

Я полагаю, это потому, что вы используете CategoryAxis для xAxis. Это означает, что вы добавляете категории с метками строковых значений (они просто являются числами). Так что он не знает, что порядок имеет значение.

Вы можете исправить это, используя NumberAxis для xAxis. Тогда, если десятичные значения меток xAxis (они автоматически вставят метки) не соответствуют вашим требованиям, вы можете возиться с пользовательским TickLabelFormatter, подобным описанному в этом вопросе.

Другие вопросы по тегам