1

デフォルトのラベルを使用する場合と同じズーム/パン機能を維持しながら、AChartEngine BarGraph にカスタム x 軸ラベルを適用するにはどうすればよいですか? 問題は、100 以上のデータ ポイントがあるため、一度に画面に 5 つまたは 6 つのラベルしか描画したくないことです。

デフォルトの機能はもともと 3 つのラベル (私の場合は 0、50、100) を描画し、拡大すると 4/5 のラベルが描画されます。左または右にパンすると、ラベルは対応するバーと一緒に移動します。

ここに画像の説明を入力 ここに画像の説明を入力

私は 2 つのアプローチを試みましたが、どちらもデフォルト ラベルと同じズームおよびパン機能を提供しません。

1) グラフが最初に作成されたときに、5 つの等間隔のラベルを生成します。

  • これの問題は、ラベルが 5 つしか作成されないため、拡大しすぎるとラベルが表示されないことです。

    //For 100 data points, add five labels every 20 datapoints
    mRenderer.addXTextLabel(0, "label 1");
    mRenderer.addXTextLabel(20, "label 2");
    mRenderer.addXTextLabel(40, "label 3");
    mRenderer.addXTextLabel(60, "label 4");
    mRenderer.addXTextLabel(80, "label 5");
    mRenderer.setXLabels(0);
    

2) GraphicalView に ZoomListener および PanListener インターフェースを実装します。

  • このソリューションはほとんど機能しますが、ラベルは常に固定された場所にあり、グラフが左右にパンされたときに新しい値で「更新」されるだけです。対応するバーで移動する必要があります。

    graphicalView.addZoomListener( new ZoomListener() {
        @Override
        public void zoomApplied(ZoomEvent e) {
            double start = mRenderer.getXAxisMin();
            double stop = (double)mRenderer.getXAxisMax();
            double step = (double)(stop - start) / 5;
            mRenderer.clearXTextLabels();
            for (double i = start; i <= stop; i += step) 
                mRenderer.addXTextLabel(i+1, "label"+(int)i);
            mRenderer.setXLabels(0);
          }
    
        @Override
        public void zoomReset() { }
    }, true, true);
    
    graphicalView.addPanListener(new PanListener() {
        @Override
        public void panApplied() {
            double start = mRenderer.getXAxisMin();
            double stop = (double)mRenderer.getXAxisMax();
            double step = (double)(stop - start) / 5;
            mRenderer.clearXTextLabels();
            for (double i = start; i <= stop; i += step) 
                mRenderer.addXTextLabel(i+1, "label"+(int)i);
            mRenderer.setXLabels(0);                
        }
    });
    

実装したいカスタム ラベルは、分単位の時間です。棒グラフで TimeSeries クラスを使用してこれを行うことはできますか?

4

1 に答える 1