JavaFX StackedBarChart - 清除系列在图表

时间:2016-02-14 19:53:07

标签: java javafx charts javafx-8

当系列数据被清除时,StackedBarChart显示奇怪的行为。我想使用StackedBarChart,我可以在多个同质数据集之间切换,即每个数据集对于一年中的每个月都有一个数值(yAxis)(xAxis)。

这个最小的例子很好地展示了问题:

import javafx.application.Application;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.StackedBarChart;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;

public class MinStackedBarChartProblem extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        CategoryAxis xAxis = new CategoryAxis();
        NumberAxis yAxis = new NumberAxis();
        StackedBarChart<String, Number> root = new StackedBarChart<>(xAxis, yAxis);
        XYChart.Series<String, Number> series = new XYChart.Series<>();
        root.getData().add(series);
        series.getData().add(new XYChart.Data<>("test", 1.0d));
        series.getData().clear();
        series.getData().add(new XYChart.Data<>("test", 1.0d));
        show(primaryStage, root);
    }

    private void show(Stage primaryStage, Parent root) {
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root, 800, 600));
        primaryStage.show();
    }
}

我构建一个包含单个系列的图表,并将一个数据条目放入值1。 然后我清除该系列并再次添加1。 结果栏从1开始,到2结束,而范围[0..1]为空。

我可以通过创建新的系列对象来解决这个问题,而这些系列对象又会改变颜色,我有另一种解决方法。

但有人知道如何解决这个问题吗?难道我做错了什么? 我应该将此作为错误提交吗?

P.S .: 看着源头。问题似乎是

private Map<Series, Map<String, List<Data<X, Y>>>> seriesCategoryMap

StackedBarChart的成员。 StackedBarChart不打算从那里删除值。

有人提出了possible duplicate,这有点不同。 首先,该问题的解决方案并不能解决这个问题。 同样在这种情况下,只有数据的顺序是错误的, 但数据看起来是正确的。

A stacked bar chart NOT starting at 0 makes no sense

所有categoryMap仍然使用第一个数据对象来计算x轴的偏移量,尽管它没有被绘制。

这仅用于记录该意外行为, 我已经切换到了解决方法。

1 个答案:

答案 0 :(得分:0)

这是一种解决方法。在您清除之前。将Y值设置为0。

series.getData().forEach(a -> a.setYValue(0));