2015-09-22 34 views
5

Desidero creare un grafico a linee multiple in tempo reale utilizzando MPAndroidChart.Come creare un grafico a linee multiple in tempo reale?

Non è un problema creare un grafico in tempo reale utilizzando solo un dato. (codice seguente)

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

E, non è un problema creare più grafici a linee utilizzando il seguente codice.

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

Tuttavia, non so come creare più grafici di grafico a linee in tempo reale.

Come posso creare più grafici a linee in tempo reale?

risposta

4

In realtà hai pubblicato la risposta alla tua domanda nella tua domanda.

Questa linea è la chiave:

data.addEntry(... , 0); 

Il 0 all'estremità specifica il set di dati-index in cui deve essere inserita la voce.

Così che cosa dovete fare è semplicemente creare fino vuoto DataSets come linee che si desidera avere, e thenn aggiungere il Entries a tutto ciò che si desidera DataSet utilizzando il metodo di cui sopra, con l'indice corretto.

Here è possibile trovare la voce wiki ufficiale per dati dinamici e in tempo reale.

+0

si può dare il codice di esempio o l'esempio – Narendra

+1

@Narendra Nel primo codice del PO, c'è una linea data.addEntry (nuova entrata (getPressure(), set.getEntryCount()), 0); ----- Qui, fai 0 come 1 nell'ultimo argomento e crea un set di dati chiamato data1. E compila gli argomenti con i quali tracciare i dati. L'aggiunta del secondo grafico è simile al primo grafico. L'unica cosa è, rendi l'indice da 0 a 1. – zwarrior

+0

@zwarrior yes make uniqueIndex per mantenere ogni riga del grafico. – 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

Per favore aggiungi una spiegazione. Un muro di codice incoraggia solo l'incollatura alla cieca. – OhBeWise

0

Ecco un semplice esempio:

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