2013-03-20 18 views
3

程序將每秒接收一次數據並在時間系列圖表上繪製它們。但是,一旦我創建了兩個系列,我不能爲它增加新的價值。它只顯示一條直線。將值添加到DynamicTimeSeriesCollection中的指定系列

enter image description here

如何將數據追加到指定的系列?即YYY。在此基礎上example,這裏是我在做什麼:

... 
    // Data set. 
    final DynamicTimeSeriesCollection dataset = 
     new DynamicTimeSeriesCollection(2, COUNT, new Second()); 
    dataset.setTimeBase(new Second(0, 0, 0, 1, 1, 2011)); 

    dataset.addSeries(gaussianData(), 0, "XXX"); 
    dataset.addSeries(gaussianData(), 1, "YYY"); 

    // Chart. 
    JFreeChart chart = createChart(dataset); 
    this.add(new ChartPanel(chart), BorderLayout.CENTER); 

    // Timer. 
    timer = new Timer(1000, new ActionListener() { 
     @Override 
     public void actionPerformed (ActionEvent e) { 
      dataset.advanceTime(); 
      dataset.appendData(new float[] { randomValue() }); 
     } 
    }); 
... 

private JFreeChart createChart (final XYDataset dataset) { 
    final JFreeChart result = ChartFactory.createTimeSeriesChart(
     TITLE, "", "", dataset, true, true, false); 
    final XYPlot  plot = result.getXYPlot(); 
    ValueAxis  domain = plot.getDomainAxis(); 
    domain.setAutoRange(true); 

    ValueAxis range = plot.getRangeAxis(); 
    range.setRange(-MINMAX, MINMAX); 
    return result; 
} 
+0

+1進行說明。 – trashgod 2013-03-20 11:38:49

回答

5

假設你從here開始,您所指定的兩個系列的數據集,但你只追加一個值與的每一跳Timer。每個勾號需要兩個值。以下是我修改了原來得到如下圖所示:

final DynamicTimeSeriesCollection dataset = 
    new DynamicTimeSeriesCollection(2, COUNT, new Second()); 
... 
dataset.addSeries(gaussianData(), 0, "Human"); 
dataset.addSeries(gaussianData(), 1, "Alien"); 
... 
timer = new Timer(FAST, new ActionListener() { 

    // two values appended with each tick 
    float[] newData = new float[2]; 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     newData[0] = randomValue(); 
     newData[1] = randomValue(); 
     dataset.advanceTime(); 
     dataset.appendData(newData); 
    } 
}); 

image