2017-04-09 33 views
1

所以我有3個不同的時間序列折線圖:如何繪製另一個時間序列,而不在JFreeChart的影響當前的時間序列

enter image description here

由於「電壓」行就是代表實時數據和全「高」和 「低」系列實際上是從文件中動態加載的(每當用戶點擊LOAD按鈕時)。

這裏的問題是,如果我從CSV文件中加載整個「高」和「低」系列,然後在實時數據到來時繪製它,它將只顯示「高」 「和」低「系列,然後我們必須等待那段時間內的實時數據(這是可以理解的)。

然後,我的想法解決這個問題是從「電壓」系列的第一個點的時間段到當前日期軸的最大時間段時添加「高」和「低」一個新的「電壓」系列。

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); 
} 

結果就是上面的圖片。不過,我真正想要的是這樣的:

enter image description here

我希望用戶仍然可以看到這些邊緣的下一部分(當「高」和「低」系列中的下一分不中,實時數據的範圍)

任何指針?

+1

爲什麼不將高/低數據與實時電壓數據合併爲後者? – trashgod

+0

您能否以一些代碼行爲例給我更多細節? – Forrest

+0

是的,爲[示例](http://stackoverflow.com/a/13205322/230513)添加數據到'process()'的實現中。 – trashgod

回答

1

您需要解決幾個問題才能獲得理想的結果。假設3個TimeSeries具有鍵"High""Low""Voltage"

  • 在使用SwignWorker背景收集數據,如圖here

  • 在你執行process(),加新到的值"Voltage",並在相關時間合併的"High""Low"現有值。

  • t n是這樣的時間。在t n + 1,要添加下一個值,例如"High"還爲時過早。相反,使用linear interpolation確定位於"High"的投影上的新點的值,如here所示。每條這樣的線將以"High"的連續值爲界,在圖中以粗糙的手繪藍色顯示。新點可以臨時添加,在連續值之間更新,最後在新值爲"High"時更換。

  • "Low"也這樣做。

  • 您可以通過重寫getItemShape()來省略臨時點的形狀,如所示,並根據需要返回空白形狀。