Сохранение расстояния между двумя метками оси x в движке Linegraph

Я работаю над линейным графиком, используя движок achart для Android. Все в порядке, я получаю то, что хочу, но. Мне нужно увеличить расстояние между каждой меткой оси X. Если есть только 4 метки, то график выглядит красиво с достаточным пространством. Но когда метки по оси x увеличиваются, расстояние между метками по оси x уменьшается. Руки помощи приветствуются.

package com.example.graph;

import java.util.List;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

import android.app.Activity;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.os.Bundle;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;

import com.example.databasetest.R;
import com.example.databasetest.sqlite.Symptom;
import com.example.databasetest.sqlite.SymptomsDbHelper;

public class NewGraphActivity extends Activity {

    public int symID;

    public NewGraphActivity(int symID) {
        super();
        this.symID = symID;
    }

    public NewGraphActivity() {
        super();
    }

    public int sympIID;
    int total = 0;

    public List<Symptom> lss;

    private XYMultipleSeriesDataset dataset;

    private XYMultipleSeriesRenderer mrenderer;

    private XYSeries mCurrentSeries;

    private XYSeriesRenderer renderer;

    private GraphicalView mChartView;

    @SuppressWarnings("deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        Bundle extras = getIntent().getExtras();
        sympIID = extras.getInt("symID");

        SymptomsDbHelper symdbc = new SymptomsDbHelper(getApplicationContext());
        lss = symdbc.getAllSymptomsForGraph(sympIID);

        dataset = getDemoDataset();
        mrenderer = getDemoRenderer();

        setContentView(R.layout.newgraphly);

        setRendererStyling();

        if (mChartView == null) {
            LinearLayout layout = (LinearLayout) findViewById(R.id.chartnew);
            mChartView = ChartFactory
                    .getLineChartView(this, dataset, mrenderer);
            mrenderer.setSelectableBuffer(100);
            layout.addView(mChartView, new LayoutParams(
                    LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        } else
            mChartView.repaint();

    }

    private void setRendererStyling() {
        mrenderer.setApplyBackgroundColor(false);
        mrenderer.setBackgroundColor(Color.argb(100, 50, 50, 50));
        mrenderer.setAxisTitleTextSize(16);
        mrenderer.setChartTitleTextSize(20);
        mrenderer.setLabelsTextSize(15);
        mrenderer.setLegendTextSize(15);

        mrenderer.setYLabelsAlign(Align.RIGHT);
        mrenderer.setMargins(new int[] { 0, 80, 0, 0 });

        mrenderer.setZoomButtonsVisible(false);
        mrenderer.setPointSize(10);

        mrenderer.setYLabels(0);
        mrenderer.setXLabels(4);



        mrenderer.setYAxisMin(-0.5);
        mrenderer.setYAxisMax(3.5);

        mrenderer.setXAxisMin(-1);
        mrenderer.setXAxisMax(lss.size()+1);

        mrenderer.setShowGrid(true);

        mrenderer.setPanEnabled(true, false);

        mrenderer.setPanLimits(new double[] { -1, lss.size()+1, 0, 0 });


        mrenderer.setZoomEnabled(false, false);

        for (int j = 0; j < 4; j++) {

            mrenderer.addYTextLabel(j, this.changeIntValue(j));
        }

        for (int count = 0; count < lss.size(); count++) {

            mrenderer.addXTextLabel(count, lss.get(count).getDistinctDate());

        }
    }

    public String changeIntValue(int count) {
        if (count == 0) {

            return "None";
        } else if (count == 1) {
            return "Light";
        } else if (count == 2) {
            return "Medium";
        } else if (count == 3) {
            return "Severe";
        }

        return null;

    }

    private XYMultipleSeriesDataset getDemoDataset() {

        XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();

        XYSeries firstSeries = new XYSeries("Sample series One");
        for (int i = 0; i < lss.size(); i++)
            firstSeries.add(i, lss.get(i).getRate());
        dataset.addSeries(firstSeries);

        return dataset;

    }

    private XYMultipleSeriesRenderer getDemoRenderer() {
        XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
        renderer.setMargins(new int[] { 20, 30, 15, 0 });
        XYSeriesRenderer r = new XYSeriesRenderer();
        r.setColor(Color.BLUE);
        r.setPointStyle(PointStyle.CIRCLE);
        r.setFillBelowLine(false);
        r.setFillBelowLineColor(Color.WHITE);
        r.setFillPoints(true);

        renderer.addSeriesRenderer(r);

        return renderer;
    }

}

Ниже приведено изображение. введите здесь описание изображения


person atomaprchya    schedule 06.05.2014    source источник


Ответы (2)


Это из-за того, что не установлено максимальное количество осей. Итак, двигатель привел все данные в поле зрения. Вы должны установить таким образом ...

XYMultipleSeriesRenderer.setXAxisMax();

XYMultipleSeriesRenderer.setXAxisMin();

Эти функции решат ваши проблемы. И я также хочу предложить установить угол для X Labels как

XYMultipleSeriesRenderer.setXLabelsAngle(45);

Спасибо.

person Hein Htet Aung    schedule 15.05.2014

Вы можете настроить количество отображаемых меток, установив приблизительное количество отображаемых меток:

renderer.setXLabels(5);
person Dan D.    schedule 20.05.2014