从轴中删除负值
Removing negative values from axis
我有一个 BarChart
和一个 LineChart
。
可能的值从负 (-) 到正 (+)。我将如何只显示正轴标签?就像只删除数字一样。
我应该制作自定义图表还是有更简单的方法?
您可以将 Y 轴下限设置为 0 并禁用自动调整范围:
yAxis.setAutoRanging(false);
yAxis.setLowerBound(0);
这是一个例子:
public class FXChart extends Application {
@Override
public void start(Stage stage) {
final NumberAxis xAxis = new NumberAxis();
final NumberAxis yAxis = new NumberAxis();
final LineChart<Number, Number> lineChart
= new LineChart<>(xAxis, yAxis);
//defining a series
XYChart.Series series = new XYChart.Series();
series.setName("My portfolio");
//populating the series with data
series.getData().add(new XYChart.Data(1, 23));
series.getData().add(new XYChart.Data(2, -14));
series.getData().add(new XYChart.Data(3, 15));
series.getData().add(new XYChart.Data(4, -24));
series.getData().add(new XYChart.Data(5, 34));
series.getData().add(new XYChart.Data(6, -36));
series.getData().add(new XYChart.Data(7, 22));
series.getData().add(new XYChart.Data(8, -45));
series.getData().add(new XYChart.Data(9, 43));
series.getData().add(new XYChart.Data(10, -17));
series.getData().add(new XYChart.Data(11, 29));
series.getData().add(new XYChart.Data(12, 25));
yAxis.setAutoRanging(false);
yAxis.setLowerBound(0);
Scene scene = new Scene(lineChart, 800, 600);
lineChart.getData().add(series);
stage.setScene(scene);
stage.show();
}
}
查看 NumberAxis 源代码后,我发现 NumberAxis class 中的 DefaultFormatter class 对此负责。所以覆盖它的 toString 方法就足够了。
myAxis.setTickLabelFormatter(new NumberAxis.DefaultFormatter(neerslagAxis) {
@Override
public String toString(Number object) {
if ((double) object < 0) {
return "";
} else {
return ("" + object).replace(".0", "");
}
}
});
我有一个 BarChart
和一个 LineChart
。
可能的值从负 (-) 到正 (+)。我将如何只显示正轴标签?就像只删除数字一样。
我应该制作自定义图表还是有更简单的方法?
您可以将 Y 轴下限设置为 0 并禁用自动调整范围:
yAxis.setAutoRanging(false);
yAxis.setLowerBound(0);
这是一个例子:
public class FXChart extends Application {
@Override
public void start(Stage stage) {
final NumberAxis xAxis = new NumberAxis();
final NumberAxis yAxis = new NumberAxis();
final LineChart<Number, Number> lineChart
= new LineChart<>(xAxis, yAxis);
//defining a series
XYChart.Series series = new XYChart.Series();
series.setName("My portfolio");
//populating the series with data
series.getData().add(new XYChart.Data(1, 23));
series.getData().add(new XYChart.Data(2, -14));
series.getData().add(new XYChart.Data(3, 15));
series.getData().add(new XYChart.Data(4, -24));
series.getData().add(new XYChart.Data(5, 34));
series.getData().add(new XYChart.Data(6, -36));
series.getData().add(new XYChart.Data(7, 22));
series.getData().add(new XYChart.Data(8, -45));
series.getData().add(new XYChart.Data(9, 43));
series.getData().add(new XYChart.Data(10, -17));
series.getData().add(new XYChart.Data(11, 29));
series.getData().add(new XYChart.Data(12, 25));
yAxis.setAutoRanging(false);
yAxis.setLowerBound(0);
Scene scene = new Scene(lineChart, 800, 600);
lineChart.getData().add(series);
stage.setScene(scene);
stage.show();
}
}
查看 NumberAxis 源代码后,我发现 NumberAxis class 中的 DefaultFormatter class 对此负责。所以覆盖它的 toString 方法就足够了。
myAxis.setTickLabelFormatter(new NumberAxis.DefaultFormatter(neerslagAxis) {
@Override
public String toString(Number object) {
if ((double) object < 0) {
return "";
} else {
return ("" + object).replace(".0", "");
}
}
});