【发布时间】: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 轴的偏移量。
不过,这只是为了记录这种意外行为, 我已经切换到解决方法。
【问题讨论】:
-
图表是否动画化并没有区别。
-
似乎在 fx10 中已修复
标签: java javafx charts javafx-8