2013-04-06 45 views
1

我在製作水平條形圖。左軸共有24個標籤。我在繪製條形圖時遇到的問題很少:使用achartengine繪製問題的橫條圖

1)條形圖啓動時,顯示的條目數量有限。用戶可以滾動查看其他條目。如圖1所示,Y軸下方出現一個條。我無法弄清楚如何將所有酒吧放在軸心之上。

2)第二個問題是值(或條)向下移動1。在「00 AM」標籤前沒有酒吧,但在第二張圖片上顯示的最後一個入場時間下方有一個額外的酒吧。如何移動酒吧?

3)我們可以在這些標籤之間顯示條形圖,而不是爲每個標籤添加焦油?

下面是一個圖表,我越來越:

Image 1

Image 2

這裏是代碼的代碼sniplet:

public class TimeCravingBarChart extends Activity {  

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     //requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.timecraving_graph); 
     final GraphicalView gv =createIntent(); 
     RelativeLayout rl=(RelativeLayout)findViewById(R.id.timegraph); 

     LayoutParams l1 = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
     rl.addView(gv,l1); 
    } 


    public GraphicalView createIntent() { 
     String[] titles = new String[] { "Urge Level"}; 
     List<double[]> values = new ArrayList<double[]>(); 

     values.add(new double[] { 6, 5, 3, 2, 6, 1, 6, 5, 3, 2, 6, 1, 6, 5, 3, 2, 6, 1, 6, 5, 3, 2, 6, 1}); 

     int[] colors = new int[] { Color.parseColor("#77c4d3")}; 
     XYMultipleSeriesRenderer renderer = buildBarRenderer(colors); 
     renderer.setOrientation(Orientation.VERTICAL); 
     setChartSettings(renderer, "Urge vs TimeOfTheDay Pattern", "Time of the day", "Urge", 1, 
      12, 0, 7, Color.WHITE, Color.WHITE); 
     renderer.setXLabels(0); 
     renderer.setYLabels(10); 
     renderer.setXRoundedLabels(false); 
     //renderer.setYRoundedLabels(false); 
     renderer.addXTextLabel(0, "00 AM "); 
     renderer.addXTextLabel(1, "01 AM "); 
     renderer.addXTextLabel(2, "02 AM "); 
     renderer.addXTextLabel(3, "03 AM "); 
     renderer.addXTextLabel(4, "04 AM "); 
     renderer.addXTextLabel(5, "05 AM "); 
     renderer.addXTextLabel(6, "06 AM "); 
     renderer.addXTextLabel(7, "07 AM "); 
     renderer.addXTextLabel(8, "08 AM "); 
     renderer.addXTextLabel(9, "09 AM "); 
     renderer.addXTextLabel(10, "10 AM "); 
     renderer.addXTextLabel(11, "11 AM "); 
     renderer.addXTextLabel(12, "12 Noon "); 
     renderer.addXTextLabel(13, "1 PM "); 
     renderer.addXTextLabel(14, "2 PM "); 
     renderer.addXTextLabel(15, "3 PM "); 
     renderer.addXTextLabel(16, "4 PM "); 
     renderer.addXTextLabel(17, "5 PM "); 
     renderer.addXTextLabel(18, "6 PM "); 
     renderer.addXTextLabel(19, "7 PM "); 
     renderer.addXTextLabel(20, "8 PM "); 
     renderer.addXTextLabel(21, "9 PM "); 
     renderer.addXTextLabel(22, "10 PM "); 
     renderer.addXTextLabel(23, "11 PM "); 

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

     final GraphicalView grfv = ChartFactory.getBarChartView(TimeCravingBarChart.this, buildBarDataset(titles, values), renderer,Type.DEFAULT); 
     return grfv; 
     } 
     protected XYMultipleSeriesRenderer buildBarRenderer(int[] colors) { 
      XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); 
      renderer.setAxisTitleTextSize(20); 
      renderer.setLabelsTextSize(20); 
      renderer.setLegendTextSize(20); 
      renderer.setPanEnabled(true, false); 
      renderer.setBarSpacing(0); 
      renderer.setOrientation(Orientation.VERTICAL); 
      renderer.setZoomEnabled(false, false); 
      renderer.setMarginsColor(Color.parseColor("#EEEDED")); 
      renderer.setXLabelsColor(Color.WHITE); 
      renderer.setYLabelsColor(0,Color.WHITE); 

      renderer.setApplyBackgroundColor(false); 
      int length = colors.length; 
      for (int i = 0; i < length; i++) { 
       SimpleSeriesRenderer r = new SimpleSeriesRenderer(); 
       r.setColor(colors[i]); 
       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]); 
       double[] v = values.get(i); 
       int seriesLength = v.length; 
       for (int k = 0; k < seriesLength; k++) { 
       series.add(v[k]); 
       } 
       dataset.addSeries(series.toXYSeries()); 
      } 
      return dataset; 
      } 
     protected void setChartSettings(XYMultipleSeriesRenderer renderer, String title, String xTitle, 
       String yTitle, double xMin, double xMax, double yMin, double yMax, int axesColor, 
       int labelsColor) { 
      renderer.setYLabelsAlign(Align.RIGHT); 
      renderer.setYTitle(yTitle); 
      renderer.setXAxisMin(xMin); 
      renderer.setXAxisMax(xMax); 
      renderer.setYAxisMin(yMin); 
      renderer.setYAxisMax(yMax); 
      renderer.setMargins(new int[] { 0, 60, 50, 0 }); // top, left, bottom or right 
      renderer.setAxesColor(axesColor); 
      renderer.setLabelsColor(labelsColor); 
      } 
} 

回答

1

水平條形圖開發更像一個實驗。這就是爲什麼有如here所述的一些問題。

它也似乎是你正在開發針對版本1.0.0。我建議你升級到最新的1.1.0版本可用here

+0

感謝您的答覆。我已經更新到1.1.0版本。我必須說,你做得很好。此外,鏈接上提到的兩個問題並不是我所擁有的。這兩個問題我很好。 – 2013-04-07 11:10:32

+0

您可以用看到的問題更新票證。但是,由於水平條形圖是一個實驗,我不確定問題修復的速度有多快。 – 2013-04-07 11:15:22

+0

好的。沒問題。謝謝 :)。 – 2013-04-07 11:16:19

0

你可以嘗試像

renderer.setBarSpacing(1); 
+0

這是不是會設置棒之間的間距? – 2013-11-20 07:29:43