0

JFreeChart を使用して「対数」の y 軸を持つ XYLineCharts を作成していますが、解決できないと思われるバグに直面しています。

値が非常に低い場合があります (そのような場合、y 軸の値の範囲は 4.5e-8 から 1.7112 です)。これらの値を、y 軸に対数軸を使用して XYLineChart にプロットします (また、y 軸に LogAxis.createLogTickUnits(Locale.ENGLISH) と .setExpTickLabelsFlag(true) を使用して指数ティック単位を作成します)。範囲の境界を 4.5e-8 から 1.712 に設定すると、グラフの y 軸に 1e0 という値が 1 つだけ表示されますが、ポイントがはっきりとわかります。

これは問題ありませんが、グラフをさらに拡大すると、y 軸の目盛りラベルが自動的に消えます。これは、y 軸の値にズームしすぎると、NumberAxis を使用するグラフでも発生します。基本的に、y 軸の値の差が非常に小さくなる (および小数点以下 8 桁を超える) と、ラベルは表示されなくなります。

JFreeChart の zoom() メソッドをオーバーライドして、チャートがズームされるたびにティック ラベル/名前を強制的に表示するにはどうすればよいですか。

提案や解決策がある場合は、できるだけ早く実装する必要があるため、できるだけ早くお知らせください。

ありがとう。

4

2 に答える 2

0

しばらく経ちましたが、ズームインすると目盛りの単位が大きくなりすぎてラベルが表示されないため、同じ問題がありました。

私がしたことは、AxisChange をリッスンし、新しいティック単位を計算してから軸に設定することです。

次に例を示します。

chart.getXYPlot().getDomainAxis().addChangeListener(new AxisChangeListener() {
        @Override
        public void axisChanged(AxisChangeEvent e) {
            // TODO Auto-generated method stub
            Date lowerB = ((DateAxis)e.getAxis()).getMinimumDate();
            Date upperB = ((DateAxis)e.getAxis()).getMaximumDate();
            setTick(((DateAxis)e.getAxis()),calculateTick(lowerB,upperB));
        }
    });

setTick メソッドで注意して、ティックが変更されたかどうかを確認してください。そうしないと、イベントが原因で無限ループになります。これは、AxiChanged Listenner ではなく「ズーム リスナー」を使用することで解決できる可能性がありますが、何も見つかりませんでした。

于 2016-01-21T11:12:39.353 に答える
0

ズーム イベントは、マウス ホイールとポップアップ メニュー コマンドの 2 つのケースでトリガーされます。いずれの場合も、「ChartPanel」の「zoom*」メソッド (zoomInBoth、zoomInDomain、zoomInRange など) が呼び出されるため、必要に応じてこれらのメソッドをオーバーライドできます。

これらのメソッドをオーバーライドするのは良い考えではないと思います。ズーム後に目盛りラベル/名前が消えないように変更できる軸の属性に関する構成がいくつかあるかもしれません。ソースコードを参照できます。

于 2014-01-17T09:48:38.823 に答える