2013-03-15 23 views
6

Jestem całkowicie nowy w systemie Android i próbuję utworzyć wykres słupkowy za pomocą AChartEngine, ma 3 paski i każdy pasek powinien być w innym kolorze. Próbowałem użyć wielu serii, ale nie mogę wyrównać wartości osi X z paskamiRóżne paski kolorów za pomocą wielu serii

protected void onResume() { 
    super.onResume(); 
    layout = (LinearLayout) findViewById(R.id.chart); 
    if (mChartView == null) 
    { 
      PeakSeries = new XYSeries("Income"); 
      ForecastPeakSeries = new XYSeries("Expense"); 
      ForecastSeries = new XYSeries("Expense"); 

      int[] x = { 1,2,3}; 
      int income = 2000; 
      int expense = 2700; 
      System.out.println("Here"); 
      Series1.add(x[0],income); 
      Series2.add(x[1],expense); 
      Series3.add(x[2],expense); 

      // Creating a dataset to hold each series 
      XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); 

      dataset.addSeries(Series1); 
      dataset.addSeries(Series2); 
      dataset.addSeries(Series3); 


      XYSeriesRenderer Renderer1 = new XYSeriesRenderer(); 
      Renderer1 .setColor(Color.RED); 
      Renderer1 .setChartValuesTextSize(18); 
      Renderer1 .setFillPoints(true); 
      Renderer1 .setDisplayChartValues(true); 

      // Creating XYSeriesRenderer to customize expenseSeries 
      XYSeriesRenderer Renderer2 = new XYSeriesRenderer(); 
      Renderer2 .setColor(Color.YELLOW); 
      Renderer2 .setChartValuesTextSize(18); 
      Renderer2 .setDisplayChartValues(true); 

      XYSeriesRenderer Renderer3 = new XYSeriesRenderer(); 
      Renderer3 .setColor(Color.CYAN); 
      Renderer3 .setChartValuesTextSize(18); 
      Renderer3 .setFillPoints(true); 
      Renderer3 .setChartValuesTextAlign(Align.CENTER); 
      Renderer3 .setDisplayChartValues(true); 

      // Creating a XYMultipleSeriesRenderer to customize the whole chart 
       double[] range = {0,5,0,5}; 
      multiRenderer.setMargins(new int[] {50, 50, 50, 50}); 
      multiRenderer.setAxisTitleTextSize(16); 
      multiRenderer.setChartTitleTextSize(30); 
      multiRenderer.setLabelsTextSize(15); 
      multiRenderer.setLegendTextSize(20); 
      multiRenderer.setLegendHeight(40); 
      multiRenderer.setBarSpacing(-0.7); 
      multiRenderer.setAxesColor(Color.WHITE); 
      multiRenderer.setInitialRange(range, 1); 
      multiRenderer.setXAxisMin(0.4); 
      multiRenderer.setXAxisMax(4); 
      multiRenderer.setYAxisMax(5000); 
      multiRenderer.setYAxisMin(0); 
      multiRenderer.setXLabelsAlign(Align.RIGHT); 
      multiRenderer.setYLabelsAlign(Align.RIGHT); 
      //multiRenderer.s(Align.LEFT); 
      multiRenderer.setPanEnabled(false, false); 
      multiRenderer.setZoomEnabled(true, true); 

      multiRenderer.setChartTitle("7 Day Outlook - Maxiumum Demand"); 
      multiRenderer.setXTitle("Date"); 
      multiRenderer.setYTitle("MW"); 

      multiRenderer.addSeriesRenderer(Renderer1); 
      multiRenderer.addSeriesRenderer(Renderer2); 
      multiRenderer.addSeriesRenderer(Renderer3); 

      final GraphicalView mChartView = ChartFactory.getBarChartView(TestSevenDay1.this, dataset, multiRenderer,Type.DEFAULT); 
      layout.addView(mChartView); 

    } 
    else 
    { 
     mChartView.repaint(); 
    } 
} 

Każda pomoc jest bardzo doceniana. enter image description here

Odpowiedz

9

Podałem go, ustawiając Type z Type.Default na Type.Stacked w getBarChartView.

ChartFactory.getBarChartView(TestSevenDay1.this, dataset, multiRenderer, Type.STACKED); 
0

Kiedy masz wykresy słupkowe z tylko jedna pozycja w serii, to jest dobry pomysł, aby nie używać renderer.setBarSpacing() i używać renderer.setBarWidth() zamiast.

+0

Czy funkcja renderer.setBarWidth() nadal występuje w wersji 1.1.0? Nie jestem w stanie z niego skorzystać. –

+0

Jest w XYMultipleSeriesRenderer. –

+0

Dzięki za odpowiedź Dan. Próbowałem to w następujący sposób: XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); renderer.setBarSpacing (0); renderer.setBarWidth (2); renderer.setOrientation (Orientation.VERTICAL); Daje mi błąd mówiąc, że "metoda setBarWidth (int) jest niezdefiniowana dla typu XYMultipleSeriesRenderer. Jaki może być problem? –

Powiązane problemy