JFreeChart を使用して系列を変更する際のランダム エラー
はじめに
この質問は、遭遇した問題について調査しますJFreeChart グラフ内の系列を動的に更新しようとしているとき。元の実装では、例外と不正なデータ表示が発生しました。
問題
提供されたコードは、スレッド内のデータ シリーズを変更することを目的としていましたが、「シリーズ インデックス出力」が発生しました。 「範囲外」および「範囲外のインデックス」の例外。グラフ表示も正常に動作しませんでした。これらのエラーの理由は、誤った同期と DateAxis の不適切な使用でした。
解決策
正しいアプローチは、次の process() メソッドからデータセットを更新することです。スイングワーカー。さらに、ドメインには DateAxis ではなく NumberAxis を使用する必要があります。この解決策を示す、修正されたコード スニペットを次に示します。
private XYSeries series = new XYSeries("Result"); ... @Override protected void process(List<Double> chunks) { for (double d : chunks) { label.setText(df.format(d)); series.add(++n, d); } }
Discussion
SwingWorker を使用すると、適切な同期が確保され、ワーカー内からデータセットを安全に更新できます。糸。 X 軸は期間ではなく反復回数を表すため、NumberAxis がドメインに適しています。
代替アプローチ
代替アプローチは、DynamicTimeSeriesCollection を使用することです。 。ただし、この方法は、X 軸ドメインが期間ではなく反復に基づいており、定期的な間隔ではなく計算が完了したときに更新する必要がある場合には適していません。
補足事項
提供されたコード スニペットは、計算の進行状況を Y 軸にプロットする折れ線グラフを作成します。 X 軸は反復数を表します。計算の進行に応じてチャートは動的に更新されます。
以上がJFreeChart シリーズを動的に更新すると「範囲外のインデックス」例外が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。