2013-03-15 20 views
6

Tôi hoàn toàn mới đối với Android và tôi đang cố gắng tạo biểu đồ thanh bằng cách sử dụng AChartEngine, nó có 3 thanh và mỗi thanh phải có màu khác nhau. Tôi đã thử sử dụng nhiều chuỗi nhưng không thể làm cho các giá trị trục x của tôi phù hợp với các thanhThanh màu khác nhau sử dụng nhiều dòng

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

Bất kỳ trợ giúp nào được đánh giá cao. enter image description here

Trả lời

9

Tôi đã xử lý nó bằng cách đặt Type từ Type.Default thành Type.Stacked trong getBarChartView.

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

Khi bạn có biểu đồ thanh chỉ với một mục cho mỗi chuỗi, bạn nên sử dụng renderer.setBarSpacing() và sử dụng renderer.setBarWidth() để thay thế.

+0

Hàm renderer.setBarWidth() vẫn có trong phiên bản 1.1.0 không? Tôi không thể sử dụng nó. –

+0

Nó nằm trong XYMultipleSeriesRenderer. –

+0

Cảm ơn bạn đã trả lời Dan. Tôi đã thử như sau: XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); renderer.setBarSpacing (0); renderer.setBarWidth (2); renderer.setOrientation (Orientation.VERTICAL); Nó cho tôi lỗi nói rằng "Phương thức setBarWidth (int) là không xác định cho loại XYMultipleSeriesRenderer. Điều gì có thể là vấn đề? –