【问题标题】:Maintaining Distance between two x-axis labels in achart engine Linegraph在echart引擎线图中保持两个x轴标签之间的距离
【发布时间】:2025-12-18 15:35:01
【问题描述】:

我一直在使用 android 的 achart 引擎来制作线图。一切都很好,我得到了我想要的,但是。我需要增加每个 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;
    }

}

下面是图片。

【问题讨论】:

    标签: android achartengine linegraph


    【解决方案1】:

    这是因为没有设置轴数的最大值。因此,引擎将所有数据都放在视图中。 你必须这样设置...

    XYMultipleSeriesRenderer.setXAxisMax();
    
    XYMultipleSeriesRenderer.setXAxisMin();
    

    此功能将解决您的问题。 而且我还想建议将 X 标签的角度设置为

    XYMultipleSeriesRenderer.setXLabelsAngle(45);
    

    谢谢。

    【讨论】:

      【解决方案2】:

      您可以通过设置您需要显示的标签的大致数量来调整显示标签的数量:

      renderer.setXLabels(5);
      

      【讨论】: