【问题标题】:JavaFX StackedBarChart - clearing series leaves invisible data in the chartJavaFX StackedBarChart - 清除系列在图表中留下不可见的数据
【发布时间】:2016-02-14 19:53:07
【问题描述】:

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

这个最小的例子很好地说明了这个问题:

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] 为空。

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

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


附: 看了源码。问题似乎是

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 轴的偏移量。

不过,这只是为了记录这种意外行为, 我已经切换到解决方法。

【问题讨论】:

标签: java javafx charts javafx-8


【解决方案1】:

这是一个解决方法。在你做清楚之前。将 Y 值设置为 0。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 2015-10-01
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    相关资源
    最近更新 更多