AChartEngine多个Y轴重叠值

时间:2012-11-14 11:11:06

标签: android axis overlap achartengine

我使用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轴?

感谢您的帮助!

enter image description here

2 个答案:

答案 0 :(得分:2)

您可以为Y轴标签设置不同的对齐方式。例如,第一个系列将对齐左侧的标签,第二个系列位于右侧,第三个系列位于中心位置。

multiRenderer.setYLabelsAlign(Align.LEFT, 0);
multiRenderer.setYLabelsAlign(Align.RIGHT, 1);
multiRenderer.setYLabelsAlign(Align.CENTER, 2);

答案 1 :(得分:0)

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

然后使用Color.argb

将两个Y刻度的颜色更改为透明