2012-05-30 108 views
3

我已經使用aChartEngine庫創建了條形圖。任何人都可以幫助我如何增加鋼筋的寬度並將鋼筋定位在X軸的中心?使用AchartEngine的條形圖

這是我的光柱類:

public class BarGraph { 
public Intent getIntent(Context context){ 
    XYMultipleSeriesRenderer mrenderer = new XYMultipleSeriesRenderer(); 
    double[] range = {0,5,0,5}; 

     int[] y = {24,30,12}; 
     CategorySeries series1 = new CategorySeries("Today"); 
     CategorySeries series2 = new CategorySeries("Next day"); 
     CategorySeries series3 = new CategorySeries("2 days later"); 

     XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); 

    for (int i=0;i<3;i++){ 
     switch(i){ 
     case 0: 
       series1.add(y[0]); 
       dataset.addSeries(series1.toXYSeries()); 
       break; 
     case 1: 
       series2.add(y[1]); 
       dataset.addSeries(series2.toXYSeries()); 
       break; 
     case 2: 
       series3.add(y[2]); 
       dataset.addSeries(series3.toXYSeries()); 
       break; 
     } 
    } 

    XYSeriesRenderer renderer1 = new XYSeriesRenderer(); 
    renderer1.setColor(Color.GREEN); 
    XYSeriesRenderer renderer2 = new XYSeriesRenderer(); 
    renderer2.setColor(Color.BLUE); 
    XYSeriesRenderer renderer3 = new XYSeriesRenderer(); 
    renderer3.setColor(Color.RED); 
     mrenderer.setAxisTitleTextSize(16); 
     mrenderer.setChartTitleTextSize(20); 
     mrenderer.setLabelsTextSize(15); 
     mrenderer.setLegendTextSize(15); 
     mrenderer.setBarSpacing(0); 
     mrenderer.setXLabels(1); 
     mrenderer.addXTextLabel(2.5, "Outstanding jobs"); 
     mrenderer.setMargins(new int[] {20, 30, 15, 0}); 
     mrenderer.setAxesColor(Color.WHITE); 
     mrenderer.setChartTitle("Work per day"); 
     mrenderer.setXTitle("Days"); 
     mrenderer.setInitialRange(range, 1); 
     mrenderer.setBarSpacing(1); 
     mrenderer.setXAxisMin(0); 
     mrenderer.setXAxisMax(5); 
     mrenderer.setYAxisMin(0); 
     mrenderer.setPanEnabled(false, false); 
     mrenderer.setZoomEnabled(false, false); 
     mrenderer.addSeriesRenderer(renderer1); 
     mrenderer.addSeriesRenderer(renderer2); 
     mrenderer.addSeriesRenderer(renderer3); 
    Intent intent = ChartFactory.getBarChartIntent(context, dataset, mrenderer, Type.DEFAULT); 
    return intent; 
}} 

這是我得到的條形圖的屏幕截圖, Bargraph

我需要這樣的柱狀圖,

Bargraph

我怎樣才能做到這一點?請幫幫我。

+1

請重新考慮反模式你打算在這裏它可能會在眼睛燒壞任何人試圖幫助的循環開關序列你...... [wiki文章](http://en.wikipedia.org/wiki/Loop-switch_sequence) – larlin

回答

2

我發現解決你的問題的唯一方法是一個相當醜陋的,但直到他們改善achartengine的顏色管理,它可能是一樣好。

首先刪除按照larlins建議的情況。

然後添加空點到對應於其他系列的填充點另一個系列:

series1.add(1,y[0]); 
    series1.add(2,0); 
    series1.add(3,0); 
    dataset.addSeries(series1); 
    series2.add(1,0); 
    series2.add(2,y[1]); 
    series2.add(3,0); 
    dataset.addSeries(series2); 
    series3.add(1,0); 
    series3.add(2,0); 
    series3.add(3,y[2]); 
    dataset.addSeries(series3); 

另外設置BarSpacing爲0,並且向Type代替Type.STACKEDType.DEFAULT。 我認爲它看起來更好,如果你刪除Label,改變了XTitle爲「傑出的工作」

4

如果你想設置的bars--

寬度試試這個...

renderer.setBarSpacing(-0.7); 
0

刪除for循環和開關情況下,我認爲,這是unnecessary.and添加兩個空白類系列一樣的

CategorySeries series(nameit) = new CategorySeries(""); 
CategorySeries series(nameit) = new CategorySeries(""); 

將它放在CategoriesSeries系列1和其他類系列2之後。 然後加零值的兩個地方一個系列1後像

series(name it).add(0); 
    dataset.addSeries(series(name it).toXYSeries()); 

和同樣做渲染器系列2後,其他:取2個XYSeriesRenderer爲透明色和renderer1後,將其粘貼像這樣

renderer2後其他
XYSeriesRenderer renderer(nameit) = new XYSeriesRenderer(); 
    renderer1.setColor(Color.TRANSPARENT); 
XYSeriesRenderer renderer(nameit) = new XYSeriesRenderer(); 
    renderer1.setColor(Color.TRANSPARENT); 

,看看你得到什麼want.cheers

0

我得到的回答神奇.... :) 我用setBarspacing,但其值設置爲0或0.5 ... 圖表可以移動這樣的值是很容易看見...... :)

XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();   
     multiRenderer.setXLabels(0); 
     multiRenderer.setLabelsTextSize(15); 
     multiRenderer.setBarSpacing(0.5); 
     multiRenderer.setChartTitle("Commercial Complex APK"); 
     multiRenderer.setXTitle("Projects"); 
     multiRenderer.setYTitle("Variance");   
     multiRenderer.setZoomButtonsVisible(true);