MP Android Chart-How to fix the number of X-Axis values in the Line Chart?

浪尽此生 提交于 2019-12-10 14:27:34

问题


private void plotchart(String s[], float[] f1) {
    chart.setBackgroundColor(Color.rgb(63, 81, 181));
    chart.setDescription("");
    // enable touch gestures
    chart.setTouchEnabled(true);
    chart.setScaleEnabled(false);
    chart.setPinchZoom(false);
    chart.setGridBackgroundColor(Color.rgb(30, 46, 141));
    chart.setDrawGridBackground(false);
    chart.getAxisRight().setEnabled(false);
    chart.setDrawMarkerViews(true);
    chart.setDragEnabled(true);
    chart.setViewPortOffsets(0f, 0f, 0f, 0f);

   // chart.setVisibleXRangeMaximum(4);


    chart.getLegend().setEnabled(false);

    XAxis x = chart.getXAxis();
    x.setEnabled(true);
    x.setDrawGridLines(false);
    x.setPosition(XAxis.XAxisPosition.BOTTOM_INSIDE);
    x.setTextColor(Color.rgb(128, 128, 255));
    x.isDrawLabelsEnabled();
    x.setAxisLineColor(Color.BLACK);
    x.setSpaceBetweenLabels(3);
    x.setAvoidFirstLastClipping(true);


    YAxis y = chart.getAxisLeft();
    y.setAxisLineColor(Color.BLACK);
    y.setTextColor(Color.BLACK);
    y.setEnabled(true);
    y.setAxisLineColor(Color.rgb(128, 128, 255));
    y.setPosition(YAxis.YAxisLabelPosition.INSIDE_CHART);
    y.setDrawGridLines(false);
    y.setLabelCount(5,true);
    y.setGridColor(Color.rgb(128, 128, 255));
    y.setDrawZeroLine(false);
    y.setDrawLimitLinesBehindData(true);
    y.setDrawGridLines(true);
    y.setDrawLimitLinesBehindData(true);
    y.setTextColor(Color.rgb(128, 128, 255));
//    chart.setExtraOffsets(20f,2f,20f,2f);

    ArrayList<com.github.mikephil.charting.data.Entry> entries= new ArrayList<>();
    for (int i = 0; i < f1.length; i++) {
        // Log.i("f1",f1[i]+"");
         entries.add(new com.github.mikephil.charting.data.Entry(f1[i], i));
    }

    MymarkerView mv =new MymarkerView(this,R.layout.custom_marker_view);
    chart.setMarkerView(mv);

    LineDataSet dataset = new LineDataSet(entries, "");
    dataset.isDrawCirclesEnabled();
    dataset.setCircleRadius(0f);
    dataset.setDrawFilled(true);
    dataset.setFillColor(Color.rgb(0, 0, 0));
    dataset.setLineWidth(0.2f);
    dataset.setValueTextSize(0f);

    dataset.setColor(Color.rgb(0, 0, 0));

  //  chart.setVisibleXRange(1, 5);
   // chart.setVisibleYRangeMaximum(5, YAxis.AxisDependency.LEFT);
  //  chart.setClickable(true);
    chart.invalidate();


    ArrayList<String> time = new ArrayList<String>();
    for (int i = 0; i < s.length; i++) {
        time.add(i, s[i]);
    }

    LineData data = new LineData(time, dataset);
    chart.setData(data);


}

I Have fixed the Y-Axis values by using setLabelCount() command.But how to fix the number of X-Axis values in my chart..For the above code i have the following chart formed.Chart1 Chart2..These are the two charts formed for different arguments given to the plotchart(String [],float[]) method.In all these charts I am facing the problem that it is not showing the fixed number of x-axis values.Somewhere it is showing 9 values and somewhere it is showing 7 values..And one more issue I am facing is that my first and the last Y-Axis values are getting hidden in my display.


回答1:


If I understood your question well, it seems that you want to use the setVisibleXRangeMaximum method.

Restraining what's visible

setVisibleXRangeMaximum(float maxXRange): Sets the size of the area (range on the x-axis) that should be maximum visible at once. If this is e.g. set to 10, no more than 10 values on the x-axis can be viewed at once without scrolling.

This method is documented in the Viewport part of the MPAndroidChart tutorial, which is linked here.

Of course, I think you will have to use the setVisibleXRangeMinimum if you want to fix an upper and a lower bounds for the number of X values.




回答2:


setLabelCount() property is there for xAxis too.

 XAxis xAxis = lineChart.getXAxis();
 xAxis.setLabelCount(5);



回答3:


To set the X-axis values to a fixed number (10 for example):

float minXRange = 10;
float maxXRange = 10;
chart.setVisibleXRange(minXRange, maxXRange); 

If the gap between your values on the X-axis is constant, it will also fix the scale for the X-axis.

To auto set the scale on the Y-Axis with 10% spacing according to your maximum and minimum values:

YAxis y1 = chart.getAxisLeft();
float percent = 10;
y1.setSpaceTop(percent);
y1.setSpaceBottom(percent);



回答4:


Set X-Axis values

xAxis.setValueFormatter(new IAxisValueFormatter() {
        @Override
        public String getFormattedValue(float value, AxisBase axis) {
            return (int) value + "";
        }
    });



回答5:


You can use IndexAxisValueFormatter method of library

ArrayList<String> xAxisLabel = new ArrayList<>();
        xAxisLabel.add("Mon");
        xAxisLabel.add("Tue");
        xAxisLabel.add("Wed");
        xAxisLabel.add("Thu");
        xAxisLabel.add("Fri");
        xAxisLabel.add("Sat");
        xAxisLabel.add("Sun");

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

Current library version v3.0.3



来源:https://stackoverflow.com/questions/38326306/mp-android-chart-how-to-fix-the-number-of-x-axis-values-in-the-line-chart

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!