2

アルゴリズムの反復ごとに1つのデータポイントで動的に更新されるJFreeChart折れ線グラフがあります。データポイントの数がすぐに非常に多くなる可能性があるため、ドメイン軸でsetFixedAutoRange(double)メソッドを使用しました。これにより、グラフは最新のn回の反復(私の場合は200)を表示するように制限されます。

これは、最初の200回の反復を除いて、うまく機能します。問題は、200回の反復が行われるまで、軸に負の値が含まれることです(たとえば、50回の反復の後、範囲は-150から50になります)。負の反復は意味がありません。軸を負の値ではなくゼロから開始したいと思います。どうすればこれを達成できますか?

軸が最初に0から200になるか(プロットがいっぱいになるまでチャートの右側の部分が空白のままになる)、または0から1で始まり、大きくなる(プロットが常に引き伸ばされるようにする)かどうかは関係ありません。チャートの全幅にわたって)。私は前者を少し好みますが、どちらでもかまいません。

私が試したこと:

何か案は?

4

4 に答える 4

4

同じ問題に遭遇しましたが、次の方法で解決しました。

axis.setAutoRangeMinimumSize(100); // Ensures graph always shows at least 0-100.
axis.setRangeType(RangeType.POSITIVE);

JFreeChart v1.0.14 を使用しています。setAutoRangeTypeおそらく、質問が最初に投稿されて以来、彼らはバグを修正しましたか?

このアプローチの欠点の 1 つは、ゼロ値が表示されないことです。

于 2013-04-03T10:17:08.873 に答える
1

範囲を手動で設定するのではなく、JFreeChart を構成して実行するソリューションを探しているようです。

私はそれを手伝うことはできません....しかし、ここにいくつかの他の醜い解決策があります:P ....

次のようなことができます (疑似コードで申し訳ありません)。

while(producingData) {
   this.produceData();
   if(!allDataButton.isSelected()) {
      domainAxis.setRange((count < 200) ? 0 : count-200), count);
    } else {
      domainAxis.setRange(0, count);
    }
}

もし私が perl コーダーだったら、ちょっと読みにくくするために、このように書きます:P

while(producingData) {
   this.produceData();
   domainAxis.setRange(
       (((count < 200) || allDataButton.isSelected()) ? 0 : count-200), count);

}
于 2009-01-29T21:09:08.447 に答える
0

私が試したこと:

setLowerBoundの呼び出しは、setFixedAutoRangeではうまく機能しません。setRangeType(RangeType.POSITIVE)を呼び出しても、違いはないようです。何か案は?

試しましたかaxis.setRange(0, 200);

于 2009-10-27T09:20:25.900 に答える
0

私は今でも実用的な解決策を持っていますが、より良いアプローチにまだ興味がありますが、

最初に、ドメイン軸の範囲を0〜200の固定範囲に設定しました。

domainAxis.setRange(0, 200);

プロットにデータを追加するコードで、追加されているのが200番目の値であるかどうかを確認し、そうである場合は、範囲を200の固定自動範囲に切り替えます。これは少し不格好ですが機能します。 (特に、ユーザーが固定ウィンドウを完全に無効にしてすべての値を表示するオプションを選択したかどうかも確認する必要があるため)。

if (!allDataButton.isSelected() && count == 200)
{
    domainAxis.setAutoRange(true);
    domainAxis.setFixedAutoRange(200);
}
于 2009-01-29T18:22:58.953 に答える