Я читаю живые данные ЭЭГ с портативного сканера ЭЭГ и строю графики с помощью StackedAreaChart. Это выполняется на компьютере Windows 10 (последнее обновление) с использованием Java 13u2 и JFX 13.
ЭЭГ отправляет данные каждую секунду, которые обновляются на графике. Я делаю это, просто добавляя данные в конец диаграммы (для первых 20 записей), затем после 20 записей я удаляю запись с нулем и вычитаю 1 из всех значений x в серии (это временные ряды по оси X, так что это имеет смысл).
Однако переход на экране довольно грубый. Узлы на графике, по-видимому, бродят вокруг, прежде чем присоединиться к правильному положению, и в результате получается ... Русский секунда в al oop):
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);
}
ПРИМЕЧАНИЕ. Этот эффект «привязки» также возникает при создании диаграммы, но в меньшей степени.
Как мне решить эту проблему сделать переход более плавным?