2011-12-15 11 views
9

Używam AChartEngine do wyświetlania średnich dla kilku dni (2 miesiące, jeśli to możliwe). Chciałbym przedstawić porównanie między jedną osobą a grupą. W tym momencie pracuję nad tym, jak podawać daty na osi X (tj. 12/15/2011 lub 11 grudnia 2011 r. Lub nawet 12/15, 15 grudnia).Achartengine: Wstawianie dat jako wartości X w

Nie jestem pewien, jak to zrobić w AchartEngine; Dokumentacja jest trochę trudna do wykonania bez zdjęć (przepraszam). Chciałbym coś takiego: Using AChartEngine library for graphs, not able to get value for diffrent x-axis value

Oto mój kod:

private void setupHistoryChart() {  
     XYMultipleSeriesRenderer renderer = getBarDemoRenderer(); 
     setChartSettings(renderer); 
     Intent intent = ChartFactory.getBarChartIntent(this, getBarDemoDataset(), renderer, Type.DEFAULT); 
     startActivity(intent); 
    } 

    public XYMultipleSeriesRenderer getBarDemoRenderer() { 
     XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); 
     renderer.setAxisTitleTextSize(15); 
     renderer.setChartTitleTextSize(18); 
     renderer.setLabelsTextSize(12); 
     renderer.setLegendTextSize(15); 
     renderer.setMargins(new int[] {20, 30, 15, 0}); 
     SimpleSeriesRenderer r = new SimpleSeriesRenderer(); 
     r.setColor(Color.BLUE); 
     renderer.addSeriesRenderer(r); 

     return renderer; 
     } 

    private void setChartSettings(XYMultipleSeriesRenderer renderer) { 
     renderer.setChartTitle("History"); 
     renderer.setChartTitleTextSize((float) 14.0); 
     renderer.setXTitle("Day"); 
     renderer.setXLabelsAlign(Align.LEFT); 
     renderer.setYLabelsAlign(Align.LEFT); 
     renderer.setBarSpacing(0.5); 
     renderer.setZoomEnabled(true); 
     renderer.setZoomRate(0.2f); 
     renderer.setYTitle("Unit)"); 
     renderer.setXAxisMin(1.0); 

     if(AppStatus.mDayMap.size() == 0){ 
      renderer.setXAxisMax(3.0); 
      renderer.setYAxisMax(10.0); 
     }else{ 
      renderer.setXAxisMax(AppStatus.mDayMap.size()); 
      // Get the max Integer out of myMap 
      Map.Entry<String, Integer> maxEntry = null; 

      for (Map.Entry<String, Integer> entry : AppStatus.mDayMap.entrySet()) 
      { 
       if (maxEntry == null || entry.getValue().compareTo(maxEntry.getValue()) > 0) 
       { 
        maxEntry = entry; 
       } 
      } 
      renderer.setYAxisMax(maxEntry.getValue()/1000 + maxEntry.getValue()/1000); 
     } 
     renderer.setYAxisMin(0); 
     } 

    private XYMultipleSeriesDataset getBarDemoDataset() { 
     XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); 
     HashMap<String, Integer> myMap = AppStatus.mDayMap; 
     CategorySeries series = new CategorySeries ("Your History " + 1); 
     try{ 

      if(AppStatus.mDayMap.size() == 0){ 
       series.add(3.0); 
       series.add(10.0); 
       dataset.addSeries(series.toXYSeries()); 
      }else{ 
       Log.v(LOG_TAG, "Size of Map = " + myMap.size()); 
       float sum = (float) 0.0; 
       if(myMap.size() > 0){ 
        Iterator it = myMap.entrySet().iterator(); 
        float j= (float)0.0; 
        for (int i = 0; i < 1 /*2*/; i++) { 
         //CategorySeries series = new CategorySeries("Your History " + (i + 1)); 
         while(it.hasNext()){ 
          Map.Entry pairs = (Map.Entry)it.next(); 
          sum = sum + (float) (1.0 + j); 
          series.add((((Integer) pairs.getValue()).doubleValue())/1000); 
         } 
         dataset.addSeries(series.toXYSeries()); 
        } 
       } 
      } 

     }catch(IllegalArgumentException e){ 
      Log.e(LOG_TAG, "IllegalArgumentException " + e.toString()); 
      series.add(3.0); 
      series.add(10.0); 
      dataset.addSeries(series.toXYSeries()); 
     } 

     return dataset; 
     } 

enter image description here

Odpowiedz

8

Można ustawić własny tekst na etykietach osi X:

renderer.addXTextLabel(x, text); 
renderer.setXLabels(0); 

W celu mają wiele kolorowych pasków na wykresie słupkowym, będziesz musiał dodać wiele serii.

Istnieje kilka instrukcji dotyczących pobierania i uruchamiania aplikacji demonstracyjnej, która zawiera dużo dobrego kodu w celu zademonstrowania użycia AChartEngine.

Powiązane problemy