3

プログラムは毎秒データを受け取り、時系列チャートに描画します。しかし、シリーズを2つ作ってしまうと、そこに新たな価値を付加することはできません。直線のみを表示します。

ここに画像の説明を入力

指定したシリーズにデータを追加するにはどうすればよいですか? すなわちYYY。このに基づいて、私がやっていることは次のとおりです。

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

1 に答える 1

5

hereから開始したと仮定すると、2 つのシリーズを含むデータセットを指定しましたが、の各目盛りに1 つの値のみを追加していますTimer。ティックごとに 2 つの値が必要です。以下の画像を取得するために元の画像を変更する方法は次のとおりです。

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

画像

于 2013-03-20T11:14:29.450 に答える