所以我有一个包含3个不同时间序列的折线图:
"电压" line是表示实时数据和整个" High"和 "低"系列实际上是从文件中动态加载的(每当用户单击“加载”按钮时)。
这里的问题是,如果我加载整个"高"和"低"来自CSV文件的系列,然后在实时数据来临时绘制它,它将仅显示"高"的最终点。和"低"系列然后我们必须等待那个时间段内的实时数据(这是可以理解的)。
然后我解决这个问题的想法是绘制" High"和"低"只是从"电压"的第一点开始。当我向"电压"添加新点时,系列到当前日期的最大时间段。系列。
public void add(Data data) throws ParseException, CloneNotSupportedException {
Date date = new SimpleDateFormat(PATTERN).parse(data.getDate());
Millisecond milis = new Millisecond(date);
timeSeries.add(milis, data.getNumber());
Date maxDate = axis.getMaximumDate();
Date minDate = dataset.getSeries(0).getTimePeriod(0).getStart();
Millisecond maxMili = new Millisecond(maxDate);
Millisecond minMili = new Millisecond(minDate);
// highSeries and lowSeries are loaded from csv file
TimeSeries tempHighSeries = highSeries.createCopy(minMili, maxMili);
TimeSeries tempLowSeries = lowSeries.createCopy(minMili, maxMili);
TimeSeriesCollection collection = new TimeSeriesCollection();
collection.addSeries(tempHighSeries);
collection.addSeries(tempLowSeries);
plot.setDataset(1, collection);
}
结果如上图所示。但是,我真正想要的是这样的:
我希望用户仍然可以看到这些边缘的下一部分(当"高"和"低"系列的下一个点不在实时数据范围内时)
任何指针?
答案 0 :(得分:1)
您需要解决几个问题才能获得所需的结果。假设有三个TimeSeries
拥有密钥"High"
,"Low"
和"Voltage"
,
使用SwignWorker
在后台收集数据,如图here所示。
在process()
的实施中,将新到达的值添加到"Voltage"
,并在相关时间合并"High"
和"Low"
的现有值。
让 t n 成为这样的时间。在 t n + 1 时,添加下一个值(例如"High"
)为时尚早。相反,使用linear interpolation确定"High"
投影所在的新点的值,如here所示。每条这样的线都将以"High"
的连续值为界,在图中以粗制的手绘蓝色显示。新点可以临时添加,在连续值之间更新,最后在新值"High"
时替换。
同样适用于"Low"
。
您可以通过覆盖getItemShape()
来省略临时点的形状,如图所示here,并根据需要返回空形状。