如何设置条形图的起点基线?

时间:2018-12-28 13:02:38

标签: javafx bar-chart

我将使用JavaFX绘制表示声力的条形图。我的值范围是-60到+3 dbBF(分贝全刻度)。

当JavaFX绘制“条”时,基线始终设置为0,因此,我的条从0到+ X(在零线上方)或从0到-X(在零线下方)绘制。 >

我的目标是使条形从-60到-X。有没有办法将基线原点设置为-60?我在Google上寻找提示,并尝试了一些尝试,但没有任何效果。

谢谢您的回答。

1 个答案:

答案 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;
  }

}

有一个警告:您必须将数据转换为基于零的数据。只需对图表数据进行此操作。换句话说,您的模型可以将数据保留在-603之间,但是图表必须将其转换为063范围内。


示例屏幕截图:

screenshot of chart