2013-07-16 126 views
9

我正在使用achartengine 1.0.1(最新)並希望演示條形圖。如何正確顯示AChartEngine條形圖

這就是我想要的:

我要的圖形

enter image description here

我取得了什麼至今

1:1的看法: enter image description here

縮小視圖:

enter image description here

問題:

  1. 左側和圖的右部分都將丟失在1:1的圖。
  2. Bar之間的距離非常高。我需要減少它。
  3. 酒吧不適合在文本標籤上方。
  4. 文字標籤的顏色是白色的。我試過setLabelColor()但不工作。
  5. 上方的文字大小很小。
  6. X軸文本 「AC」, 「WA」 等與1重疊,2,3,我想刪除1,2,3,只顯示 「AC」, 「WA」 等

待辦事項你知道如何解決這些問題?我需要一個近似於我的所需的圖表。提前致謝。

編輯:

這是我試圖代碼:

public GraphicalView getView(Context context) 
    { 
     // Bar 1 

     XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); 

     XYSeries ac = new XYSeries("AC"); 
     XYSeries pe = new XYSeries("PE"); 
     XYSeries wa = new XYSeries("WA"); 
     XYSeries tl = new XYSeries("TL"); 
     XYSeries ml = new XYSeries("ML"); 
     XYSeries ce = new XYSeries("CE"); 
     XYSeries re = new XYSeries("RE"); 
     XYSeries ot = new XYSeries("OT"); 
     ac.add(1, 291); 
     pe.add(2, 11); 
     wa.add(3, 204); 
     tl.add(4, 28); 
     ml.add(5, 0); 
     ce.add(6, 21); 
     re.add(7, 51); 
     ot.add(8, 4); 
     dataset.addSeries(ac); 
     dataset.addSeries(pe); 
     dataset.addSeries(wa); 
     dataset.addSeries(tl); 
     dataset.addSeries(ml); 
     dataset.addSeries(ce); 
     dataset.addSeries(re); 
     dataset.addSeries(ot); 


     XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer(); 
     mRenderer.setChartTitle("Submission Statistics"); 
     mRenderer.setXTitle("Verdict Code"); 
     mRenderer.setYTitle("No. of Submissions"); 
     mRenderer.setAxesColor(Color.BLACK); 
     mRenderer.setLabelsColor(Color.BLACK); 
     mRenderer.setApplyBackgroundColor(true); 
     mRenderer.setBackgroundColor(Color.WHITE); 
     mRenderer.setMarginsColor(Color.WHITE); 
     mRenderer.setZoomEnabled(true); 
     mRenderer.setZoomButtonsVisible(true); 
     mRenderer.setBarSpacing(-0.5); 
//  mRenderer.setMargins(new int[] {20, 30, 15, 0}); 
     mRenderer.setAxisTitleTextSize(16); 
     mRenderer.setChartTitleTextSize(20); 
     mRenderer.setLabelsTextSize(15); 
     mRenderer.setLegendTextSize(15); 
     mRenderer.addXTextLabel(1, "AC"); 
     mRenderer.addXTextLabel(2, "PE"); 
     mRenderer.addXTextLabel(3, "WA"); 
     mRenderer.addXTextLabel(4, "TL"); 
     mRenderer.addXTextLabel(5, "ML"); 
     mRenderer.addXTextLabel(6, "CE"); 
     mRenderer.addXTextLabel(7, "RE"); 
     mRenderer.addXTextLabel(8, "OT"); 
     mRenderer.setBarWidth(50); 
//  mRenderer.setXAxisMax(9); 
     mRenderer.setXAxisMin(0); 
     mRenderer.setYAxisMin(0); 

     XYSeriesRenderer renderer = new XYSeriesRenderer(); 
     renderer.setColor(Color.parseColor("#00AA00")); 
     renderer.setDisplayChartValues(true); 



     XYSeriesRenderer renderer2 = new XYSeriesRenderer(); 
     renderer2.setColor(Color.parseColor("#666600")); 
     renderer2.setDisplayChartValues(true); 

     XYSeriesRenderer renderer3 = new XYSeriesRenderer(); 
     renderer3.setColor(Color.parseColor("#FF0000")); 
     renderer3.setDisplayChartValues(true); 

     XYSeriesRenderer renderer4 = new XYSeriesRenderer(); 
     renderer4.setColor(Color.parseColor("#0000FF")); 
     renderer4.setDisplayChartValues(true); 

     XYSeriesRenderer renderer5 = new XYSeriesRenderer(); 
     renderer5.setColor(Color.parseColor("#6767D0")); 
     renderer5.setDisplayChartValues(true); 

     XYSeriesRenderer renderer6 = new XYSeriesRenderer(); 
     renderer6.setColor(Color.parseColor("#AAAA00")); 
     renderer6.setDisplayChartValues(true); 

     XYSeriesRenderer renderer7 = new XYSeriesRenderer(); 
     renderer7.setColor(Color.parseColor("#00AAAA")); 
     renderer7.setDisplayChartValues(true); 

     XYSeriesRenderer renderer8 = new XYSeriesRenderer(); 
     renderer8.setColor(Color.parseColor("#000000")); 
     renderer8.setDisplayChartValues(true); 


     mRenderer.addSeriesRenderer(renderer); 
     mRenderer.addSeriesRenderer(renderer2); 
     mRenderer.addSeriesRenderer(renderer3); 
     mRenderer.addSeriesRenderer(renderer4); 
     mRenderer.addSeriesRenderer(renderer5); 
     mRenderer.addSeriesRenderer(renderer6); 
     mRenderer.addSeriesRenderer(renderer7); 
     mRenderer.addSeriesRenderer(renderer8); 

     return ChartFactory.getBarChartView(context, dataset,mRenderer, Type.DEFAULT); 
    } 

編輯(應用丹的建議後)

enter image description here

我的新代碼:

......... 
mRenderer.setChartTitle("Submission Statistics"); 
     mRenderer.setXTitle("Verdict Code"); 
     mRenderer.setYTitle("No. of Submissions"); 
     mRenderer.setAxesColor(Color.BLACK); 
     mRenderer.setApplyBackgroundColor(true); 
     mRenderer.setBackgroundColor(Color.WHITE); 
     mRenderer.setMarginsColor(Color.WHITE); 
     mRenderer.setZoomEnabled(true); 
     mRenderer.setBarSpacing(-0.5); 
     mRenderer.setMargins(new int[] {20, 30, 15, 0}); 
     mRenderer.setShowLegend(false); 
     mRenderer.setAxisTitleTextSize(16); 
     mRenderer.setChartTitleTextSize(20); 
     mRenderer.setLabelsTextSize(15); 
     mRenderer.setLegendTextSize(15); 
     mRenderer.addXTextLabel(1, "AC"); 
     mRenderer.addXTextLabel(2, "PE"); 
     mRenderer.addXTextLabel(3, "WA"); 
     mRenderer.addXTextLabel(4, "TL"); 
     mRenderer.addXTextLabel(5, "ML"); 
     mRenderer.addXTextLabel(6, "CE"); 
     mRenderer.addXTextLabel(7, "RE"); 
     mRenderer.addXTextLabel(8, "OT"); 
     mRenderer.setBarWidth(50); 
     mRenderer.setXAxisMin(-2); 
     mRenderer.setXAxisMax(11); 
     mRenderer.setYAxisMin(0); 
     mRenderer.setYLabelsAlign(Align.RIGHT); 
     mRenderer.setXLabelsColor(Color.BLACK); 
     mRenderer.setYLabelsColor(0, Color.BLACK); 
     mRenderer.setXLabels(0); 
     mRenderer.setChartValuesTextSize(16); 
......... 

現在的問題是:

  1. mRenderer.setChartValuesTextSize(size);不工作,因爲它是 過時的最高的酒吧在頂部
  2. 分裂
  3. 欄文本仍然很小至今
  4. X軸標籤與酒吧沒有正確對齊
+0

顯示一些代碼。你是如何構建圖表的。 – wtsang02

+0

哎呀!忘了添加代碼。現在我補充說。看看:) –

+0

你是否嘗試過使用barspacing,例如setBarSpacing(0.1)? – wtsang02

回答

2

按照你的編號方案:

  1. 您可以通過設置可見區域的X軸的最小值和最大值解決這個問題:mRenderer.setXAxisMin(min);mRenderer.setXAxisMax(max);
  2. 可以通過增加寬度或利用上述方法減少它如左右兩側有更多空間。
  3. 這是一個開放的問題。
  4. 嘗試mRenderer.setXLabelsColor(color);
  5. renderer.setChartValuesTextSize(size);
  6. mRenderer.setXLabels(0);

編輯:

  1. 使用renderer.setChartValuesTextSize(size);
  2. 同#1。
  3. mRenderer.setYAxisMax(300);
  4. 已知問題:http://code.google.com/p/achartengine/issues/detail?id=312
+0

感謝您的回答!'renderer'或'mRenderer'? –

+0

mRenderer。不客氣 –

+0

我的圖形非常接近我所需的圖形 - 需要一些修改,我編輯了我的問題。請看看:) –

0
GraphicalView mChart = createIntent(); 
    layout_graph.addView(mChart); 



public GraphicalView createIntent() { 

     String[] titles = new String[] { " " }; 

     List<Double> values = new ArrayList<Double>(); 




     for (int i = 0; i < yaxes_value.size(); i++) { 
//   values.add(Double.parseDouble(yaxes_value.get(i))); 


     } 


     int[] colors = new int[] { Color.parseColor("#4DBA7A") }; 
     XYMultipleSeriesRenderer renderer = buildBarRenderer(colors); 
     setChartSettings(renderer, "Simple Bar Chart", X_title, Y_title+type, 
       Color.BLACK, Color.BLACK,values); 

     for (int i = 0; i < Xaxes_value.size(); i++) { 
      renderer.addXTextLabel(i + 1, Xaxes_value.get(i)); 
     } 

     int length = renderer.getSeriesRendererCount(); 
     for (int i = 0; i < length; i++) { 
      SimpleSeriesRenderer seriesRenderer = renderer 
        .getSeriesRendererAt(i); 
      // seriesRenderer.setDisplayChartValues(true); 
     } 

     final GraphicalView grfv = ChartFactory.getBarChartView(
       GraphActivity.this, buildBarDataset(titles, values), renderer, 
       Type.DEFAULT); 


     return grfv; 
    } 

    protected XYMultipleSeriesRenderer buildBarRenderer(int[] colors) { 
     XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); 
     renderer.setAxisTitleTextSize(25); 
     renderer.setChartTitleTextSize(20); 
     renderer.setLabelsTextSize(20); 
     renderer.setLegendTextSize(20); 
     renderer.setPanEnabled(false, false); 
     renderer.setPanEnabled(false); 
     renderer.setZoomEnabled(false); 
     renderer.setZoomEnabled(false, false); 
     renderer.setBarSpacing(1f); 
     renderer.setBarWidth(50f); 
     renderer.setMarginsColor(Color.WHITE); 
     renderer.setXLabelsColor(Color.BLACK); 
     renderer.setYLabelsColor(0, Color.BLACK); 
     renderer.setApplyBackgroundColor(true); 
     renderer.setXLabelsAngle(335); 

     int length = colors.length; 
     for (int i = 0; i < length; i++) { 
      SimpleSeriesRenderer r = new SimpleSeriesRenderer(); 
      r.setColor(colors[i]); 
      r.setChartValuesSpacing(10); 
      renderer.addSeriesRenderer(r); 
     } 
     return renderer; 
    } 

    protected XYMultipleSeriesDataset buildBarDataset(String[] titles, 
      List<Double> values) { 
     XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); 
     int length = titles.length; 
     for (int i = 0; i < length; i++) { 
      CategorySeries series = new CategorySeries(titles[i]); 
      for (int j = 0; j < values.size(); j++) { 
       series.add(values.get(j)); 
      } 
      dataset.addSeries(series.toXYSeries()); 
     } 
     return dataset; 
    } 

    protected void setChartSettings(XYMultipleSeriesRenderer renderer, 
      String title, String xTitle, String yTitle, int axesColor, 
      int labelsColor,List<Double> values) { 

     renderer.setChartTitle(title); 
     renderer.setYLabelsAlign(Align.RIGHT); 
     renderer.setXTitle(xTitle); 
     renderer.setYTitle(yTitle); 
     renderer.setXAxisMin(0); 
     renderer.setXLabels(0); 
     renderer.setXLabelsPadding(10); 
     renderer.setYLabelsPadding(2); 
     renderer.setYAxisMin(0); 
     renderer.setMargins(new int[] { 40, 100, 40, 20 }); 
//  renderer.setYAxisMin((Collections.min(values))/2); 
//  renderer.setYAxisMax((Collections.max(values)) 
//    + (Collections.min(values))); 
     renderer.setXAxisMax(layout_addrow.getChildCount() + 1); 
     renderer.setAxesColor(axesColor); 
     renderer.setLabelsColor(labelsColor); 

    } 
1

我遇到同樣的問題。這是因爲AChartegine試圖爲每個渲染器分配足夠的空間,因此需要進行輪換。這應該簡單地通過Type.STACKED

變化

ChartFactory.getBarChartView(context, dataset,mRenderer, Type.DEFAULT);

決心

ChartFactory.getBarChartView(context, dataset,mRenderer, Type.STACKED);

希望這有助於!

2

我發現尺寸密度計算不正確。

如果妳想要的:

mRenderer.setLabelsTextSize(15); 
mRenderer.setLegendTextSize(15); 

您需要設置:

mRenderer.setLabelsTextSize(15* getResources().getDisplayMetrics().density); 
mRenderer.setLegendTextSize(15* getResources().getDisplayMetrics().density);