2017-12-18 194 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++)