2011-12-15 26 views
9

Estoy usando AChartEngine para mostrar los promedios a lo largo de varios días (2 meses si es posible). Me gustaría proporcionar una comparación entre un individuo y un grupo. En este punto, estoy trabajando en cómo proporcionar fechas en el eje x (es decir, 12/15/2011 o 11 de diciembre de 2011 o incluso 12/15, 15 de diciembre).Achartengine: Insertar fechas como valores X en

No estoy seguro de cómo hacer esto en AchartEngine; la documentación es un poco difícil de seguir sin imágenes (lo siento). Me gustaría algo como esto: Using AChartEngine library for graphs, not able to get value for diffrent x-axis value

Aquí está mi código:

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

Respuesta

8

Puede configurar el texto de encargo para las etiquetas de los ejes X:

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

Con el fin de tiene barras de colores múltiples en el gráfico de barras, tendrá que agregar varias series.

Hay algunas instrucciones here sobre cómo descargar y ejecutar la aplicación de demostración que incluye una gran cantidad de código válido para demostrar el uso de AChartEngine.

Cuestiones relacionadas