2015-09-22 18 views
5

Ich möchte in Echtzeit mehrere Liniendiagramme mit MPAndroidChart machen.Wie mache ich eine Echtzeit-Mehrfachliniengrafik?

Es ist kein Problem, Echtzeitgraph mit nur einer Daten zu erstellen. (folgender code)

Und es ist kein Problem, mehrere Liniendiagramme mit folgendem Code zu erstellen.

private void setData(int count, float range) { 
    ArrayList<String> xValues = new ArrayList<String>(); 
    for (int i = 0 ; i < count ; i++) { 
     xValues.add((1 + i) + ""); 
    } 

    ArrayList<LineDataSet> dataSets = new ArrayList<LineDataSet>(); 

    for (int k = 0 ; k < 3 ; k++) { 
     ArrayList<Entry> yValues = new ArrayList<Entry>(); 

     for (int i = 0 ; i < count ; i++) { 
      if (k == 0) { 
       yValues.add(new Entry(getSetPressure(), i)); 
      } 
      else if (k == 1) { 
       yValues.add(new Entry(getCurrentPressure(), i)); 
      } 
      else { 
       yValues.add(new Entry(getSuctionPressure(), i)); 
      } 
     } 

     String s; 
     String c; 
     if (k == 0) { 
      s = "Set Pressure"; 
      c = "#ed1f24"; 
     } 
     else if (k == 1) { 
      s = "Current Pressure"; 
      c = "#004bf6"; 
     } 
     else { 
      s = "Suction Pressure"; 
      c = "#ffba00"; 
     } 

     LineDataSet set = new LineDataSet(yValues, s); 

     set.setAxisDependency(YAxis.AxisDependency.LEFT); 
     set.setDrawCubic(false); 
     set.setDrawCircles(false); 
     set.setCircleColor(Color.parseColor(c)); 
     set.setCircleSize(8f); 
     set.setCircleColorHole(Color.BLACK); 
     set.setDrawCircleHole(false); 
     set.setLineWidth(3f); 
     set.setColor(Color.parseColor(c)); 
     set.setDrawHorizontalHighlightIndicator(false); 
     set.setDrawVerticalHighlightIndicator(false); 

     dataSets.add(set); 
    } 

    LineData data = new LineData(xValues, dataSets); 

    data.setDrawValues(false); 
    data.setHighlightEnabled(false); 

    mChart.setData(data); 
} 

Allerdings weiß ich nicht, wie man mehrere Echtzeit-Liniendiagramm erstellen.

Wie kann ich mehrere Echtzeit-Liniendiagramme erstellen?

Antwort

4

Sie haben tatsächlich die Antwort auf Ihre Frage in Ihrer Frage geschrieben.

Diese Linie ist der Schlüssel:

data.addEntry(... , 0); 

Die 0 am Ende legt den Datensatz-Index, in dem der Eintrag eingefügt werden soll.

Also, was Sie tun müssen, einfach so viele leere DataSets wie Linien, die Sie haben wollen, ist zu erstellen, und fügen Sie Ihre thenn Entries, was auch immer DataSet Sie wollen, indem Sie die oben genannten Verfahren mit dem richtigen Index.

Here finden Sie den offiziellen Wiki-Eintrag für dynamische- und Echtzeitdaten.

+0

können Sie Beispielcode oder Beispiel – Narendra

+1

@Narendra Im OP des ersten Code geben, gibt es eine Zeile data.addEntry (neuer Eintrag (getPressure(), set.getEntryCount()), 0); ----- Hier mache ich 0 als 1 im letzten Argument und mache das Dataset namens data1. Und füllen Sie die Argumente aus, mit denen Daten geplottet werden sollen. Das Hinzufügen eines zweiten Graphen ähnelt dem ersten Graphen. Einzige Sache ist, machen Sie den Index von 0 bis 1. – zwarrior

+0

@zwarrior ja make uniqueIndex, um jede Grafikzeile zu pflegen. – Narendra

2
private void addEntry(int min, int max) { 
    data = mChart.getData(); 
    if (data != null) { 
     LineDataSet dataSetGraphA = data.getDataSetByIndex(0); 
     LineDataSet dataSetGraphB = data.getDataSetByIndex(1); 
     LineDataSet dataSetGraphC = data.getDataSetByIndex(2); 
     LineDataSet dataSetGraphD = data.getDataSetByIndex(3); 
     // LineDataSet set1= data.getDataSetByIndex(1); 
     // set.addEntry(...); // can be called as well 
     if (dataSetGraphA == null) { 
      dataSetGraphA = setLineDataSet(0); 
      data.addDataSet(dataSetGraphA); 
     } 
     if (dataSetGraphB == null) { 
      dataSetGraphB = setLineDataSet(1); 
      data.addDataSet(dataSetGraphB); 
     } 
     if (dataSetGraphC == null) { 
      dataSetGraphC = setLineDataSet(2); 
      data.addDataSet(dataSetGraphC); 
     } 
     if (dataSetGraphD == null) { 
      dataSetGraphD = setLineDataSet(3); 
      data.addDataSet(dataSetGraphD); 
     } 
     Calendar c = Calendar.getInstance(); 

     // yyyy-MM-dd.HH.mm.ss.SS 
     SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss.SS"); 
     String formattedDate = df.format(c.getTime()); 
     // Now formattedDate have current date/time 
     System.out.println("Current time = " + formattedDate); 
     Toast.makeText(this, formattedDate, Toast.LENGTH_SHORT).show(); 
     // add a new x-value first 
     data.addXValue(formattedDate); 
     data.addEntry(
       new Entry(randomInRange(min, max), dataSetGraphA 
         .getEntryCount()), 0); 
     data.addEntry(
       new Entry(randomInRange(min, max), dataSetGraphB 
         .getEntryCount()), 1); 
     data.addEntry(
       new Entry(randomInRange(min, max), dataSetGraphC 
         .getEntryCount()), 2); 
     data.addEntry(
       new Entry(randomInRange(min, max), dataSetGraphD 
         .getEntryCount()), 3); 

     // let the chart know it's data has changed 
     mChart.notifyDataSetChanged(); 

     mChart.setVisibleXRangeMaximum(6); 
     mChart.setVisibleYRangeMaximum(15, AxisDependency.LEFT); 
     // 
     // // this automatically refreshes the chart (calls invalidate()) 
     mChart.moveViewTo(data.getXValCount() - 7, 50f, AxisDependency.LEFT); 
    } 
} 
+0

Bitte fügen Sie eine Erklärung hinzu. Eine Codewand ermutigt nur zu blindem Kopieren. – OhBeWise

0

Hier ist ein einfaches Beispiel:

private void addEntry() { 

    LineData data = mChart.getData(); 

    LineDataSet set0 = (LineDataSet) data.getDataSetByIndex(0); 
    LineDataSet set1 = (LineDataSet) data.getDataSetByIndex(1); 

    if (set0 == null || set1 == null) { 
     // creation of null 
     set0 = createSet(); 
     set1 = createSet(); 

     data.addDataSet(set0); 
     data.addDataSet(set1); 
    } 

    data.addXValue(""); 

    data.addEntry(new Entry((float) (Math.random() * 20) + 2f, set0.getEntryCount()), 0); 
    data.addEntry(new Entry((float) (Math.random() * 20) + 2f, set1.getEntryCount()), 1); 

    mChart.notifyDataSetChanged(); 

    mChart.setVisibleXRangeMaximum(6); 

    mChart.moveViewToX(data.getXValCount() - 7);    
}