2017-12-18 18 views
1

、私はMPAndroidラインチャートのY軸上のx軸と値の日付を渡す必要がcompile 'com.github.PhilJay:MPAndroidChart:v3.0.0-beta1'xaxisに日付を追加し、Yaxisの値をMP android線グラフに追加しますか?私は図書館MPAndroidを使用しています

私は、x軸またはy軸の値を渡していたときに、アプリが示すクラッシュしますArrayIndexOutOfBoundException、配列サイズは-2です。

どうすれば達成できますか?私はxAxis値フォーマッタも使用しました。 、help.Belowは私のコードAxisValueFormatterが正しい使い方

{ 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

でください。あなたが直面している問題は、ライブラリがチャートの前後にラベルを描きたいが、配列内の値を見つけることができないということです。

これを解決するには、空のラベルのサイズ変更と再調整をチェックします。

@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 at 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++) 
関連する問題