1

こんにちは、私は Android アプリケーションでグラフを使用しています。その中で、グラフを毎秒更新します。値を更新するときに、このグラフを右から左に移動したいと思います。どんな助けでも感謝します。

 dataset = new XYMultipleSeriesDataset();

         renderer = new XYMultipleSeriesRenderer();

         renderer.setChartTitleTextSize(12);
         renderer.setLabelsTextSize(15);
         renderer.setMarginsColor(Color.argb(0x00, 0x01, 0x01, 0x01));
         renderer.setApplyBackgroundColor(true);
         renderer.setBackgroundColor(Color.TRANSPARENT);
         renderer.setZoomEnabled(false, false);
         renderer.setPointSize(5f);
         renderer.setShowGrid(true);
         renderer.setXTitle("Time");
         renderer.setYTitle("Number");

         rendererSeries = new XYSeriesRenderer();

         rendererSeries.setColor(Color.BLUE);
         rendererSeries.setFillBelowLine(false);
         rendererSeries.setFillPoints(true);
         rendererSeries.setPointStyle(PointStyle.CIRCLE);
         renderer.addSeriesRenderer(rendererSeries);

         timeSeries = new TimeSeries("Random");
         mThread = new Thread(){
             public void run(){
                 while(true){
                     try {
                         Thread.sleep(2000L);
                     } 
                     catch (InterruptedException e) {
                         e.printStackTrace();
                     }

                     timeSeries.add(new Date(), random.nextInt(10));
                     mchartView.repaint();
                 }
             }
         };
         mThread.start();

         dataset.addSeries(timeSeries);
         mchartView = ChartFactory.getLineChartView(Pedometer.this, dataset, renderer);
         mchartView.refreshDrawableState();
         mchartView.repaint();

         llChart.addView(mchartView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
4

4 に答える 4

2

新しいポイントを追加するたびに、setRange を使用して必要な範囲を設定できます。例えば:

double maxX = timeSeries.getMaxX();
double minX = maxX - deltaX; // deltaX is your required x-range
double maxY = timeSeries.getMinY();
double minY = timeSeries.getMaxY();

renderer.setRange(new double[] { minX, maxX, minY, maxY });

このようにして、右端には常に最大時間が表示され、残りのグラフは右から左に移動します。

それが役に立てば幸い。

于 2012-05-31T07:24:36.417 に答える
0

グラフに軸の最小値と最大値を自動計算させる簡単な方法は、それらを最小値と最大値に設定してから再描画することです。例えば:

mRenderer.setXAxisMax(-Double.MAX_VALUE);
mRenderer.setXAxisMin(Double.MAX_VALUE);
mRenderer.setYAxisMax(-Double.MAX_VALUE);
mRenderer.setYAxisMin(Double.MAX_VALUE);

mChartView.repaint();

それが最良の選択肢かどうかはわかりませんが、私にとってはうまくいきます!

参考: 私のAndroid AChartEngineはすでに動作していますが、見栄えを良くするにはどうすればよいですか?

于 2012-10-19T15:07:39.027 に答える
0

私のコードでは、次のアイデアを思いつきました。

    private void animatePlot(float t, float[] v) {
            // moving plot
            datasets[i].add(t, v[i]);
            if (mPointsCount > GRAPH_RESOLUTION)
                datasets[i].remove(0);
            view.repaint();
            mPointsCount++;
    }
  • t と v は、x、y プロットの値に対応します。
  • t が成長しています。
  • 新しいデータ (t と v) を取得したら、この関数を呼び出します。
  • GRAPH_RESOLUTION は、プロットが左に移動し始めるグラフに表示されるポイントの量です。
于 2015-10-22T10:34:55.800 に答える
0

グラフを動かしたい場合は、現在行っているように新しいデータを追加する必要があります。グラフがいっぱいになったら(必要な数のポイントがあると)、最も古いポイントの削除を開始する必要があります。これにより、最新の X 個のポイントを表示するウィンドウが表示されます。

TimeSeries を使用している場合は、使用すると呼び出すことができtimeSeries.setMaximumItemCount(maxNumPoints)、残りは時系列で処理されると思います。

お役に立てれば。

于 2012-05-29T18:44:22.657 に答える