2017-12-18 190 views
1

我使用库MPAndroid,compile 'com.github.PhilJay:MPAndroidChart:v3.0.0-beta1'在xaxis上添加日期和MP android中的Yaxis值线图?

我必须通过在x轴方向和值的日期上在MPAndroid折线图表Y轴,当我传递值x轴或y轴,则该应用被示出坠毁ArrayIndexOutOfBoundException,数组大小为-2。

如何实现这个目标?我也使用了xAxis值格式化程序。请help.Below是我的代码

{ mChart.setOnChartGestureListener(this); mChart.setOnChartValueSelectedListener(this); mChart.setDrawGridBackground(false);

mChart.setNoDataTextDescription("You need to provide data for the chart."); 
    mChart.setTouchEnabled(false); 
    mChart.getAxisLeft().setDrawGridLines(false); 
    mChart.getXAxis().setDrawGridLines(false); 
    mChart.setDragEnabled(false); 
    mChart.setScaleEnabled(false); 
    mChart.getAxisLeft().setDrawLimitLinesBehindData(true); 

    XAxis xAxis = mChart.getXAxis(); 
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); 
    xAxis.setLabelRotationAngle(270); 
    xAxis.setAxisLineWidth(3); 
    xAxis.setAxisMaxValue(310f); 
    xAxis.setTextSize(13f); 
    xAxis.setTextColor(Color.WHITE); 

    YAxis leftAxis = mChart.getAxisLeft(); 
    leftAxis.removeAllLimitLines(); 
    leftAxis.setAxisMaxValue(330f); 
    leftAxis.setAxisMinValue(50f); 
    leftAxis.setAxisLineWidth(3); 
    leftAxis.setDrawAxisLine(false); 
    leftAxis.setDrawGridLines(true); 
    leftAxis.setTextSize(13f); 
    leftAxis.setGranularity(1f); 
    leftAxis.setTextColor(Color.WHITE); 
    leftAxis.setDrawZeroLine(false); 
    leftAxis.setDrawLimitLinesBehindData(false); 

    mChart.getAxisRight().setEnabled(false); 
    mChart.animateX(2500, Easing.EasingOption.EaseInOutQuart); 

    mChart.invalidate(); 

} 

     private ArrayList<String> setXAxisValues() { 
    return typesList; 
} 

private ArrayList<Entry> setYAxisValues() { 
    float[] EndTime = new float [glucoseReportReading.length]; 
    for (int i=0; i<glucoseReportReading.length;i++) 
    { 
     float number = Float.parseFloat(glucoseReportReading[i]); 
     float rounded = (int) Math.round(number * 1000)/1000f; 
     EndTime[i] = rounded; 
    } 

    ArrayList<Entry> yVals = new ArrayList<Entry>(); 

    for(int i=0;i<glucoseReadingArrayList.size();i++){ 
     yVals.add(new Entry(EndTime[i],i)); 
    } 

    return yVals; 
} 

private void setData() { 
    GraphModelClass graphModelClass = new GraphModelClass(); 
    ArrayList<Entry> yVals1 = setYAxisValues(); 
    ArrayList<String> xVals1 = setXAxisValues(); 
    graphModelClass.setyVals(yVals1); 
    graphModelClass.setxVals(xVals1); 

    ArrayList<String> xVals = graphModelClass.getxVals();//setXAxisValues(); 
    ArrayList<Entry> yVals = graphModelClass.getyVals();//setYAxisValues(); 

    LineDataSet set1; 

    set1 = new LineDataSet(yVals, "DataSet 1"); 
    set1.setFillColor(Color.TRANSPARENT); 
    set1.setColor(Color.RED); 
    set1.setCircleColor(Color.BLUE); 
    set1.setLineWidth(2f); 
    set1.setCircleRadius(4f); 
    set1.setDrawCircleHole(true); 
    set1.setValueTextSize(10f); 
    set1.setDrawFilled(true); 
    /* ArrayList<LineDataSet> dataSets = new ArrayList<LineDataSet>(); 
    dataSets.add(set1);*/ 
    LineData data = new LineData(xVals,set1); 
    mChart.setData(data);} 

回答

0

使用一个AxisValueFormatter是正确的。您面临的问题是图书馆希望在图表的前后绘制标签,但无法在数组中找到值。

您可以通过检查指示符和回退空标签来解决此问题。

@Override 
public String getFormattedValue(float value, AxisBase axis) { 
    if (value < 0 || value > glucoseReportTime.size() - 1) 
     return ""; 
    return glucoseReportTime[(int) value]; 
} 

如果你不想空的空间可以进一步使用

XAxis xAxis = chart.getXAxis(); 
xAxis.setAxisMinimum(<yourMinum>); 
xAxis.setAxisMaximum(<yourMaximum>); 
+0

应用程序崩溃显示java.lang.NegativeArraySizeException:-2 在com.github.mikephil.charting.utils.Transformer.generateTransformedValuesLine(Transformer.java:181 – aman

+0

我猜你的x值没有排序。不幸的是,lib不能处理未排序的条目。如果是这种情况,请尝试将其排序。 – woodii

+0

不,条目已按升序排序。 – aman

0

替换该行之前和您的图表后:

for(int i=0;i<glucoseReadingArrayList.size();i++) 

有:

for(int i=0;i<typesList.size();i++)