2016-08-29 1 views
2

Ich habe MP LineChart implementiert. Alles funktioniert bis auf eins. Es fügt den ersten Monat am Ende der x-Achse hinzu. und Werte beginnen mit dem zweiten Punkt, nicht mit dem ersten. Ich habe mehrere Lösungen auf Google versucht, konnte aber nicht erfolgreich sein. z. B. im folgenden Screenshot meine Monatsliste enthält [apr, mai, jun, jul, aug], aber seine Zugabe in extra apr am Ende und Linie beginnt ab Mai nicht apr. Folgendes ist mein Code.MP-Diagramm mit einem zusätzlichen Wert an X_axis in Liniendiagramm angezeigt?

String[] mMonths; 
    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.activity_multi_line_chart); 
    context = this; 
    mpref = new MySharedPreferences(this); 
    charts_list = new ArrayList<Charts_Data_Model>(); 
    mChart = (LineChart) findViewById(R.id.chart1); 
    mChart.setOnChartValueSelectedListener(this); 

    mChart.setDrawGridBackground(false); 
    mChart.setDescription("VSC CHART"); 
    mChart.setDrawBorders(false); 

    mChart.getAxisLeft().setEnabled(true); 
    mChart.getAxisRight().setDrawAxisLine(false); 
    mChart.getAxisRight().setEnabled(false); 
    mChart.getAxisRight().setDrawGridLines(false); 
    mChart.getXAxis().setDrawAxisLine(true); 
    mChart.getXAxis().setDrawGridLines(true); 

    // enable touch gestures 
    mChart.setTouchEnabled(true); 

    // enable scaling and dragging 
    mChart.setDragEnabled(true); 
    mChart.setScaleEnabled(true); 

    // if disabled, scaling can be done on x- and y-axis separately 
    mChart.setPinchZoom(true); 


    Legend l = mChart.getLegend(); 
    l.setPosition(Legend.LegendPosition.ABOVE_CHART_LEFT); 
    l.setXEntrySpace(7f); 
    l.setYEntrySpace(0f); 
    l.setYOffset(0f); 
    l.setDirection(Legend.LegendDirection.LEFT_TO_RIGHT); 
    l.setWordWrapEnabled(true); 


    new Task4().execute(); 

    } 


    class Task4 extends AsyncTask<Void, Void, String> { 

    @Override 
    protected void onPreExecute() { 
     pDialog = new ProgressDialog(MultiLineChartActivity.this); 
     pDialog.setMessage("please wait"); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(true); 
     pDialog.show(); 
     super.onPreExecute(); 
    } 

    @Override 
    protected String doInBackground(Void... arg0) { 


     getChartDataHadsM(); 


     //Record method 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 

     super.onPostExecute(result); 
     XAxis xAxis = mChart.getXAxis(); 
     xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); 
     xAxis.setAxisMinValue(0f); 
     xAxis.setAvoidFirstLastClipping(true); 
     // xAxis.setGranularityEnabled(false); 
     xAxis.setGranularity(1f); 

     xAxis.setValueFormatter(new AxisValueFormatter() { 
      @Override 
      public String getFormattedValue(float value, AxisBase axis) { 
       return mMonths[(int) value % mMonths.length]; 
      } 

      @Override 
      public int getDecimalDigits() { 
       return 0; 
      } 
     }); 


     LineData data = new LineData(sets); 
     mChart.setData(data); 
     mChart.invalidate(); 
     pDialog.dismiss(); 

    } 
} 

    public void getChartDataHadsM() { 
    mMonths = new String[charts_list_HadsM.size()]; 
    ArrayList<Entry> e1 = new ArrayList<Entry>(); 
    ArrayList<Entry> e2 = new ArrayList<Entry>(); 

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

     String month = charts_list_HadsM.get(i).month; 
     mMonths[i] = month; 
     String anx = charts_list_HadsM.get(i).anx; 
     String dep = charts_list_HadsM.get(i).dep; 

     e1.add(new Entry(i + 1, Integer.parseInt(anx))); 
     e2.add(new Entry(i + 1, Integer.parseInt(dep))); 


    } 
    sets = new ArrayList<ILineDataSet>(); 
    if (!e1.isEmpty()) { 
     LineDataSet d1 = new LineDataSet(e1, "anxiety"); 
     d1.setLineWidth(2.5f); 
     d1.setCircleRadius(4.5f); 
     d1.setHighLightColor(Color.rgb(244, 117, 117)); 
     d1.setDrawValues(false); 
     sets.add(d1); 
    } 
    if (!e2.isEmpty()) { 
     LineDataSet d2 = new LineDataSet(e2, "depression"); 
     d2.setLineWidth(2.5f); 
     d2.setCircleRadius(4.5f); 
     d2.setHighLightColor(Color.rgb(244, 117, 117)); 
     d2.setColor(ColorTemplate.VORDIPLOM_COLORS[0]); 
     d2.setCircleColor(ColorTemplate.VORDIPLOM_COLORS[0]); 
     d2.setDrawValues(false); 
     sets.add(d2); 
    } 


} 

Screen Shot of my line chart

Bitte Jede mögliche Tipp oder Hilfe geschätzt.

Antwort

1

Ich habe nicht mit dem Diagrammsatz gearbeitet, den Sie verwenden. Aber der Fehler, den Sie beschreiben, und das Bild sehen so aus, als würden Sie die Indizes durcheinander bringen.

Ich habe die Quelle überprüft und ich fanden die folgende Sache, die ich verdächtige finden und Sie können überprüfen möchten:

for (int i = 0; i < size; i++) { 
// your month list is 0-based 
    String month = charts_list_HadsM.get(i).month; 
    mMonths[i] = month; 
    String anx = charts_list_HadsM.get(i).anx; 
    String dep = charts_list_HadsM.get(i).dep; 


// Your data list is 1-based 
// You add the data at (i+1) effectively skipping position 0 
    e1.add(new Entry(i + 1, Integer.parseInt(anx))); 
    e2.add(new Entry(i + 1, Integer.parseInt(dep))); 


} 

Im Wesentlichen Ihr Monat jetzt eine Legende zu wenig haben, und es scheint, dass die Legende rotiert, wenn es das Ende der Einträge erreicht.

Es Ihr Bild passt:

In April Spalte, gibt es keinen Wert, es beginnt mit MAY. Dann werden die Werte hinzugefügt, aber es gibt einen weiteren Wert als in der Legende Monat ist. Daher wird die Legende mit APR neu gestartet, um den zusätzlichen Wert anzuzeigen.

Ich schlage vor, dieses Update:

for (int i = 0; i < size; i++) { 
// your month list is 0-based 
    String month = charts_list_HadsM.get(i).month; 
    mMonths[i] = month; 
    String anx = charts_list_HadsM.get(i).anx; 
    String dep = charts_list_HadsM.get(i).dep; 


// Make entries index 0-based, too 
    e1.add(new Entry(i, Integer.parseInt(anx))); 
    e2.add(new Entry(i, Integer.parseInt(dep))); 
} 
+0

thnx Sie gerade meinen Tag gerettet. –

Verwandte Themen