JavaFX LineChart:在图表中间插入新数据

时间:2014-01-28 15:07:57

标签: java charts javafx series linechart

我正在使用JavaFX的折线图:

LineChart<Number, Number> lineChart = new LineChart<>(xAxis, yAxis);

XYChart.Series series = new XYChart.Series();

lineChart.getData().add(series);

我想连续向系列添加数据,因此无法预测值到达的顺序。例如,索引可以介于0和系列的当前大小之间。

series.getData().add(new XYChart.Data(index, value));

考虑以下情况:

//initializing...
series.getData().add(new XYChart.Data(1, 400));
series.getData().add(new XYChart.Data(3, 500));
series.getData().add(new XYChart.Data(8, 100));
series.getData().add(new XYChart.Data(12, 120));
series.getData().add(new XYChart.Data(20, 300));

//later...
series.getData().add(new XYChart.Data(2, 450));
series.getData().add(new XYChart.Data(5, 300));
series.getData().add(new XYChart.Data(15, 200));

问题在于如何描绘图表。在上面的示例中,在索引20处,图形循环回到索引2.它看起来像这样: enter image description here

但我希望它看起来像这样: enter image description here

如果没有额外的线穿过图表,需要进行哪些设置才能正确更新图形?

2 个答案:

答案 0 :(得分:1)

我这样做(我的数据是字符串,数字)。我不禁想到必须有更好的方法。我把这一切都放在一个方法中,所以我可以调用addSorted(series,newData);

final Comparator<XYChart.Data<String, Number>> comparator = 
        (XYChart.Data<String, Number> o1, XYChart.Data<String, Number> o2) -> 
                o1.getXValue().compareTo(o2.getXValue());
lineChart.getData().get(0).getData().add(new XYChart.Data<>("2020", 1));
XYChart.Series newSeries = new XYChart.Series(lineChart.getData().get(0).getData().sorted(comparator));
lineChart.getData().add(0,newSeries);

答案 1 :(得分:1)

JavaFX 9对这个问题有了新的答案。

如果您有JDK9,请尝试

lineChart.setAxisSortingPolicy(LineChart.SortingPolicy.X_AXIS);

(这是JavaFX 9的默认设置)

如果您希望按添加顺序绘制数据,请使用:

lineChart.setAxisSortingPolicy(LineChart.SortingPolicy.NONE);

请参阅此处的信息: http://download.java.net/jdk9/jfxdocs/javafx/scene/chart/LineChart.html#axisSortingPolicyProperty