1

AChartEngine をライブラリとして使用して、折れ線グラフを描画します。この折れ線グラフは、複数の Y 軸 (3 ~ 5 軸) で構成され、X 軸のタイムラインに沿って進みます。

私の問題は、Y軸の値が重なっているということです(画像を参照)

私のコードは次のとおりです。

//Puls, Geschwindigkeit und Hoehenmeter dem Diagramm hinzufugen
        HashMap<Long, Heartrate> heartrateMap = trainingLog.getHeartrateList();
        HashMap<Long, GPS> gpsMap = trainingLog.getGpsList();
        //Puls, Geschwindigkeit und Hoehenmeter dem Diagramm hinzufugen
        XYSeries heartrateSeries = new XYSeries("Puls", 0);
        XYSeries altitudeSeries = new XYSeries("Höhenmeter", 1);
        XYSeries speedSeries = new XYSeries("Geschwindigkeit", 2);

        for(int i=0; i<trainingLog.getDuration(); i++){
            Heartrate heartrate = heartrateMap.get(Long.valueOf(i));
            if(heartrate != null){
                heartrateSeries.add(i, heartrate.getHeartrate());
            }

            GPS gps = gpsMap.get(Long.valueOf(i));
            if(gps != null){
                altitudeSeries.add(i, gps.getAltitude());
                speedSeries.add(i, gps.getSpeed());
            }
        }

        XYMultipleSeriesDataset dataSet = new XYMultipleSeriesDataset();
        dataSet.addSeries(0, heartrateSeries);
        dataSet.addSeries(1, altitudeSeries);
        dataSet.addSeries(2, speedSeries);

        XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer(3);

        //Renderer fuer Pulswerte
        XYSeriesRenderer rendererHeartrate = new XYSeriesRenderer();
        rendererHeartrate.setColor(Color.RED);
        multiRenderer.addSeriesRenderer(rendererHeartrate);
        //Renderer fuer Hoehenmeter
        XYSeriesRenderer rendererAltitude = new XYSeriesRenderer();
        rendererAltitude.setColor(Color.BLUE);
        multiRenderer.addSeriesRenderer(rendererAltitude);
        //Renderer fuer Geschwindigkeit
        XYSeriesRenderer rendererSpeed = new XYSeriesRenderer();
        rendererSpeed.setColor(Color.DKGRAY);
        multiRenderer.addSeriesRenderer(rendererSpeed);

        //Hintergrundfarbe weiß setzen
        multiRenderer.setApplyBackgroundColor(true);
        multiRenderer.setBackgroundColor(Color.WHITE);
        multiRenderer.setMarginsColor(Color.argb(0x00, 0x01, 0x01, 0x01));

        //Label--Einstellungen
        multiRenderer.setYLabelsColor(0, Color.RED);
        multiRenderer.setYLabelsColor(1, Color.BLUE);
        multiRenderer.setYLabelsColor(2, Color.DKGRAY);
        multiRenderer.setLabelsTextSize(25);

        int length = multiRenderer.getSeriesRendererCount();
        for (int i = 0; i < length; i++) {
            XYSeriesRenderer r = (XYSeriesRenderer) multiRenderer.getSeriesRendererAt(i);
            r.setLineWidth(2f);
        }

        //Legenden-Einstellungen
        multiRenderer.setLegendTextSize(20);

        multiRenderer.setMargins(new int[] {20, 20, 20, 20});

        Looper.prepare();
        graphicalView = ChartFactory.getLineChartView(getActivity(), dataSet, multiRenderer);

この問題を解決する方法を知っている人はいますか?最善の方法は、y ラベルを互いに平行に設定することですが、これを行う方法が見つかりませんでした。または、各 y ラベルの余白を y 軸に設定する機能はありますか?

ご協力いただきありがとうございます!

ここに画像の説明を入力

4

2 に答える 2

2

Y軸ラベルに異なる配置を設定できます。たとえば、最初のシリーズは左側にラベルを配置し、2番目のシリーズは右側に、3番目のシリーズは中央に配置します。

multiRenderer.setYLabelsAlign(Align.LEFT, 0);
multiRenderer.setYLabelsAlign(Align.RIGHT, 1);
multiRenderer.setYLabelsAlign(Align.CENTER, 2);
于 2012-11-14T11:23:03.133 に答える
0

使用した 3 つのスケールすべてについて、y 軸の最小値と最大値を設定するだけです。

次に、Color.argb を使用して 2 つの Y スケールの色を透明に変更します。

于 2013-08-11T14:52:51.400 に答える