Java JFX 13图表更新不平滑(转换时捕捉)

Java JFX 13图表更新不平滑(转换时捕捉),java,javafx,Java,Javafx,我正在从便携式脑电扫描仪上读取实时脑电数据,并用StackedAreaChart绘图。这是在使用Java13U2和JFX13的Windows10(最新更新)计算机上运行的 EEG每秒发送一次数据,该数据在图形上更新。我这样做的方法就是将数据添加到图表的末尾(对于前20个条目),然后在20个条目之后,删除第0个条目,并从序列中的所有x值中减去1(这是x轴上的时间序列,因此这是有意义的) 然而,在屏幕上看到的过渡是相当粗糙的。图上的节点似乎在连接到正确位置之前四处游荡,结果是。。。平淡的 下面是更新

我正在从便携式脑电扫描仪上读取实时脑电数据,并用StackedAreaChart绘图。这是在使用Java13U2和JFX13的Windows10(最新更新)计算机上运行的

EEG每秒发送一次数据,该数据在图形上更新。我这样做的方法就是将数据添加到图表的末尾(对于前20个条目),然后在20个条目之后,删除第0个条目,并从序列中的所有x值中减去1(这是x轴上的时间序列,因此这是有意义的)

然而,在屏幕上看到的过渡是相当粗糙的。图上的节点似乎在连接到正确位置之前四处游荡,结果是。。。平淡的

下面是更新子例程(它在循环中每秒运行一次):

var-eSenseData=eSenseChart.getData();
var brainwaveData=brainwaveChart.getData();
//如果没有序列,则添加空序列
if(eSenseData.isEmpty()){
eSenseData.add(注意);
添加(冥想);
//添加数据(门塔勒福德);
//数据。添加(熟悉度);
添加(增量);
添加(θ);
brainwaveData.add(低α);
brainwaveData.add(highAlpha);
brainwaveData.add(低β);
brainwaveData.add(highBeta);
brainwaveData.add(低伽马);
brainwaveData.add(高伽马);
}
//获取旧数据,获取最近的20个条目并绘制它们的图表
var可接受分录=20;
//如果条目数小于可接受条目数
if(eSenseData.get(0.getData().size(){
data.setXValue(data.getXValue()-1);
});
series.getData().add(值);
}
注意:创建图表时也会发生这种“捕捉”效果,但程度较小


我该如何解决这一问题以使过渡更加顺利?

请..@kleopatra鉴于服务器产生实时值,而我无法复制产生实时值的硬件,我认为这将是相当大的工作量。。。但我能做到。我只需要一点时间。模拟数据源。。。
                        var eSenseData = eSenseChart.getData();
                        var brainwaveData = brainwaveChart.getData();
                        //If there are no series, add empty ones
                        if (eSenseData.isEmpty()) {
                            eSenseData.add(attention);
                            eSenseData.add(meditation);
                            //data.add(mentalEffort);
                            //data.add(familiarity);

                            brainwaveData.add(delta);
                            brainwaveData.add(theta);
                            brainwaveData.add(lowAlpha);
                            brainwaveData.add(highAlpha);
                            brainwaveData.add(lowBeta);
                            brainwaveData.add(highBeta);
                            brainwaveData.add(lowGamma);
                            brainwaveData.add(highGamma);
                        }
                        //Get Old Data, take most recent 20 entries and graph them
                        var acceptableEntries = 20;
                        //If the number of entries is less than acceptableEntries
                        if (eSenseData.get(0).getData().size() < acceptableEntries) {
                            eSenseData.get(0).getData().add(new Data<>(eSenseData.get(0).getData().size(), packet.getAttention()));
                            eSenseData.get(1).getData().add(new Data<>(eSenseData.get(1).getData().size(), packet.getMeditation()));
}
else {
                            setNew(eSenseData.get(0), new Data<>(20, packet.getAttention()));
                            setNew(eSenseData.get(1), new Data<>(20, packet.getMeditation()));
}

/**
     * Removes the first entry and adds the new one.
     *
     * @param series The series to use
     * @param value The value to add
     */
    private static <X, Y> void setNew(Series<Integer, Y> series, Data<Integer, Y> value) {
        series.getData().remove(0);
        series.getData().stream().forEach(data -> {
            data.setXValue(data.getXValue() - 1);
        });
        series.getData().add(value);
    }