2015-09-22 29 views
5

Chcę, aby w czasie rzeczywistym wiele linechart przy użyciu MPAndroidChart.Jak tworzyć wykres liniowy w czasie rzeczywistym?

Nie ma problemu, aby wykres w czasie rzeczywistym wykorzystywać tylko jedno dane. (poniższy kod)

private void addEntry(int count) { 
    LineData data = mChart.getData(); 

    if (data != null) { 
     LineDataSet set = data.getDataSetByIndex(0); 

     if (set == null) { 
      set = createSet(); 
      data.addDataSet(set); 
     } 

     data.addXValue(""); 

     data.addEntry(new Entry(getPressure(), set.getEntryCount()), 0); 

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

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

     // limit the number of visible entries 
     mChart.setVisibleXRange(0, count); 

     // move to the latest entry 
     mChart.moveViewToX(data.getXValCount() - (count + 1)); 
    } 
} 

I nie ma problemu, aby utworzyć wiele wykresów liniowych za pomocą następującego kodu.

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); 
} 

Jednak nie wiem, jak wykonać wiele wykresów linechart w czasie rzeczywistym.

Jak utworzyć wykres liniowy w czasie rzeczywistym?

Odpowiedz

4

Rzeczywiście wysłałeś odpowiedź na swoje pytanie w swoim pytaniu.

Linia ta jest kluczem:

data.addEntry(... , 0); 

0 na koniec określa DataSet-index gdzie powinien być wstawiony wpis.

co trzeba zrobić, to po prostu utworzyć wiele pusty DataSets jako linie, które chcesz mieć, a thenn Dodaj swoją aby cokolwiek EntriesDataSet chcesz za pomocą wyżej wymienionego sposobu z prawidłowym wskaźnikiem Tak.

Here można znaleźć oficjalny wpis wiki dla danych dynamicznych i danych w czasie rzeczywistym.

+0

można podać przykładowy kod lub przykładowy – Narendra

+1

@Narendra W pierwszym kodem OP, istnieje linia data.addEntry (Nowy wpis (getPressure() set.getEntryCount()), 0); ----- Tutaj wpisz 0 jako 1 w ostatnim argumencie i utwórz zestaw danych o nazwie data1. I wypełnij argumenty, z którymi dane mają być drukowane. Dodanie drugiego wykresu jest podobne do pierwszego wykresu. Jedyną rzeczą jest, aby indeks od 0 do 1. – zwarrior

+0

@zwarrior tak zrobić uniqueIndex do utrzymania każdego wiersza wykresu. – 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

Proszę dodać wyjaśnienie. Ściana kodu zachęca tylko do wklepywania niewidomych kopii. – OhBeWise

0

Oto prosty przykład:

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);    
}