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 轴标签设置不同的对齐方式。例如,第一个系列会将标签对齐在左侧,第二个在右侧,第三个在中心。

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

只需为您使用的所有三个刻度设置 y 轴最小值和最大值。

然后使用 Color.argb 将两个 Y 刻度的颜色更改为透明

于 2013-08-11T14:52:51.400 回答