我将使用JavaFX绘制表示声力的条形图。我的值范围是-60到+3 dbBF(分贝全刻度)。
当JavaFX绘制“条”时,基线始终设置为0,因此,我的条从0到+ X(在零线上方)或从0到-X(在零线下方)绘制。 >
我的目标是使条形从-60到-X。有没有办法将基线原点设置为-60?我在Google上寻找提示,并尝试了一些尝试,但没有任何效果。
谢谢您的回答。
答案 0 :(得分:1)
我不知道更改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
范围内。>
示例屏幕截图: