Add values to a specified series in a DynamicTimeSeriesCollection
java, jfreechart
Solution
Assuming you started from here, you've specified a dataset with two series, but you're only appending one value with each tick of the `Timer`. You need two values for each tick. Here's how I modified the original to get the picture below:
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);
}
});
Problem
The program will receive data every second and draw them on time Series chart. However, once I create two series, I cannot add new value to it. It displays a straight line only. How do I append data to a specified series? I.e. `YYY`. Based on this example, here's what I'm doing: ``` ... // 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; } ```