将x轴标签添加到mpandroid条形图仅显示数组列表中的第一个标签

问题描述

我想将x轴标签添加到我的条形图中,我得到的只是第一个显示标签

The current out put

我正在使用的代码如下。我已根据使用mpandroidchart的库文档中提供的演示数据对它进行了自定义

      public class HomeFragment extends SimpleFragment implements OnChartGestureListener {

@NonNull
public static Fragment newInstance() {
    return new HomeFragment();
}

private BarChart chart;

@Override
public View onCreateView(@NonNull LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_home,container,false);

    BarChart chart = (BarChart) v.findViewById(R.id.chart);
    BarData data = new BarData(getDataSet());
    data.setBarWidth(10f);
    chart.setData(data);
    chart.animateXY(2000,2000);
    chart.invalidate();
    XAxis xAxis = chart.getXAxis();
    xAxis.setPosition(XAxis.XAxisPosition.BottOM);
    xAxis.setDrawGridLines(true);
    xAxis.setValueFormatter(new IndexAxisValueFormatter(getXAxisValues()));

    return v;
}

private ArrayList getDataSet() {
    ArrayList dataSets = null;
    ArrayList valueSet1 = new ArrayList();
    BarEntry v1e1 = new BarEntry(0.f,0); // Jan
    valueSet1.add(v1e1);
    BarEntry v1e2 = new BarEntry(20.000f,2); // Feb
    valueSet1.add(v1e2);
    BarEntry v1e3 = new BarEntry(40.000f,4); // Mar
    valueSet1.add(v1e3);
    BarEntry v1e4 = new BarEntry(60.000f,6); // Apr
    valueSet1.add(v1e4);
    BarEntry v1e5 = new BarEntry(80.000f,8); // May
    valueSet1.add(v1e5);
    BarEntry v1e6 = new BarEntry(100.000f,10); // Jun
    valueSet1.add(v1e6);
    BarEntry v1e7 = new BarEntry(120.000f,12); // Jan
    valueSet1.add(v1e7);
    BarEntry v1e8 = new BarEntry(140.000f,14); // Feb
    valueSet1.add(v1e8);
    BarEntry v1e9 = new BarEntry(160.000f,16); // Mar
    valueSet1.add(v1e9);
    BarEntry v1e10 = new BarEntry(180.000f,18); // Apr
    valueSet1.add(v1e10);
    BarEntry v1e11 = new BarEntry(200.000f,20); // May
    valueSet1.add(v1e11);
    BarEntry v1e12 = new BarEntry(220.000f,22); // Jun
    valueSet1.add(v1e12);
    BarDataSet barDataSet1 = new BarDataSet(valueSet1,"Monthly Sales");
    barDataSet1.setColors(ColorTemplate.MATERIAL_COLORS);
    dataSets = new ArrayList();
    dataSets.add(barDataSet1);
    return dataSets;
}

private ArrayList getXAxisValues() {
    ArrayList xAxis = new ArrayList();
    xAxis.add("JAN");
    xAxis.add("FEB");
    xAxis.add("MAR");
    xAxis.add("APR");
    xAxis.add("MAY");
    xAxis.add("JUN");
    xAxis.add("JULY");
    xAxis.add("AUG");
    xAxis.add("SEPT");
    xAxis.add("OCT");
    xAxis.add("NOV");
    xAxis.add("DEC");
    return xAxis;
    }
}

我对这个库是陌生的,因此可能我在犯一些错误,我正在使用此示例,因为可以很容易地对其进行进一步定制以从数据库获取数据。我可能做错了什么?

我已经如下循环尝试过此行 xAxis.setValueFormatter(new IndexAxisValueFormatter(getXAxisValues()));

    for(int i=0; i<=12;i++){
        xAxis.setValueFormatter(new IndexAxisValueFormatter(getXAxisValues().subList(0,i)));
    }

那也只是显示一个标签

解决方法

您不需要以下代码:

for(int i=0; i<=12;i++){
    xAxis.setValueFormatter(new IndexAxisValueFormatter(getXAxisValues().subList(0,i)));
}

您需要的是用以下行替换上面的代码:

chart.getXAxis().setValueFormatter(new IndexAxisValueFormatter(getXAxisLables()));

获取标签的方法是:

private ArrayList<String> getXAxisLabels()
{
    ArrayList<String> labels = new ArrayList<String> ();

    labels.add( "JAN");
    labels.add( "FEB");
    labels.add( "MAR");
    labels.add( "APR");
    labels.add( "MAY");
    labels.add( "JUN");
    return labels;
}

请根据您的要求修改getLabels()方法。