将值添加到DynamicTimeSeriesCollection中的指定系列

该程序将每秒接收数据并在时间序列图表上绘制它们。 但是,一旦我创建了两个系列,我就无法为其添加新值。 它仅显示一条直线。

在此处输入图像描述

如何将数据附加到指定的系列? 是的,你。 基于这个例子 ,这就是我正在做的事情:

 ... // 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; } 

假设你从这里开始,你已经指定了一个包含两个系列的数据集,但是你只需要在Timer每个刻度上附加一个值。 每个tick都需要两个值。 以下是我如何修改原始图片以获得下图:

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

图片