Я не знаю, как изменить базовую линию диаграммы JavaFX.Тем не менее, вы можете сделать так, чтобы выглядел , как будто оно начинается с -60
.Класс ValueAxis
(и, соответственно, NumberAxis
) имеет свойство для форматирования меток: tickLabelFormatter
.Вы можете указать свой собственный StringFormatter
, который делает ярлыки «выключенными на 60».Вот пример:
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.scene.Scene;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart.Data;
import javafx.scene.chart.XYChart.Series;
import javafx.stage.Stage;
import javafx.util.StringConverter;
public class App extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
var scene = new Scene(createChart() 600, 400);
primaryStage.setScene(scene);
primaryStage.setTitle("SO-53959031");
primaryStage.show();
}
@SuppressWarnings("unchecked")
private Series<String, Number> createData() {
return new Series<>(FXCollections.observableArrayList(
new Data<>("Test #0", 40),
new Data<>("Test #1", 20),
new Data<>("Test #2", 63),
new Data<>("Test #3", 50),
new Data<>("Test #4", 30)
));
}
private BarChart<String, Number> createChart() {
var yAxis = new NumberAxis("dbBF", 0, 63, 1);
yAxis.setTickLabelFormatter(new StringConverter<>() {
@Override
public String toString(Number object) {
return Double.toString(object.doubleValue() - 60);
}
@Override
public Number fromString(String string) {
return Double.valueOf(string) + 60;
}
});
var chart = new BarChart<>(new CategoryAxis(), yAxis);
chart.getData().add(createData());
chart.setLegendVisible(false);
return chart;
}
}
Есть одно предупреждение: вы должны перевести свои данные, чтобы они начинались с нуля.Это нужно сделать только для данных диаграммы.Другими словами, ваша модель может хранить данные между -60
и 3
, но их необходимо перевести в диапазон от 0
до 63
для диаграммы.
Пример экрана: