2015-09-22 18 views
5

Tôi muốn tạo nhiều linechart theo thời gian thực bằng cách sử dụng MPAndroidChart.Làm cách nào để tạo biểu đồ nhiều đường thời gian thực?

Không có vấn đề gì khi tạo biểu đồ thời gian thực chỉ sử dụng một dữ liệu. (mã sau)

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

Và, không có vấn đề gì khi tạo biểu đồ nhiều đường bằng mã sau.

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

Tuy nhiên, tôi không biết cách tạo nhiều đồ thị linechart thời gian thực.

Tôi làm cách nào để tạo nhiều biểu đồ đường thời gian thực?

Trả lời

4

Bạn thực sự đã đăng câu trả lời cho câu hỏi của mình trong câu hỏi.

Dòng này là chìa khóa:

data.addEntry(... , 0); 

Các 0 ở cuối quy định cụ thể số liệu-index nơi mục nên được chèn vào. Vì vậy, những gì bạn cần làm chỉ đơn giản là tạo ra nhiều dòng trống mà bạn muốn có, và sau đó thêm Entries vào bất kỳ số DataSet nào bạn muốn bằng cách sử dụng phương pháp được đề cập ở trên với chỉ mục chính xác.

Here bạn có thể tìm thấy mục nhập wiki chính thức cho dữ liệu động và thời gian thực.

+0

bạn có thể cung cấp cho mã mẫu hoặc ví dụ – Narendra

+1

@Narendra Trong mã đầu tiên của OP, có một dòng data.addEntry (Entry mới (getPressure(), set.getEntryCount()), 0); ----- Ở đây, làm cho 0 là 1 trong đối số cuối cùng và làm cho tập dữ liệu được gọi là data1. Và điền vào các đối số với dữ liệu được vẽ. Thêm đồ thị thứ hai tương tự như đồ thị đầu tiên. Chỉ có điều, làm cho chỉ số từ 0 đến 1. – zwarrior

+0

@zwarrior có làm cho uniqueIndex duy trì từng hàng biểu đồ. – 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

Vui lòng thêm giải thích. Một bức tường mã chỉ khuyến khích dán bản sao mù. – OhBeWise

0

Dưới đây là một ví dụ đơn giản:

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);    
} 
Các vấn đề liên quan