Reputation: 177
I have created bar graph using aChartEngine library. Can anyone help me how to increase the width of the bars and position the bars at the centre of X-axis?
This is my BarGraph class:
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;
}}
This is the screenshot of the bargraph that i get,
I need a bargraph like this,
How can i achieve this? Please help me.
Upvotes: 3
Views: 4334
Reputation: 3
i got an answer.... :) i used setBarspacing, but setting the value 0 or 0.5... The chart can be moved so the values are easily visible...... :)
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);
Upvotes: 0
Reputation: 3236
Remove the for loop and switch case i think that is unnecessary.and add two blank categories series like
CategorySeries series(nameit) = new CategorySeries("");
CategorySeries series(nameit) = new CategorySeries("");
place it one after CategoriesSeries series1 and the other after CategoriesSeries series2. then add zero values two place one after series1 and the other after series2 like
series(name it).add(0);
dataset.addSeries(series(name it).toXYSeries());
and the same do with the renderer :Make two XYSeriesRenderer as Transparent color and paste them after renderer1 and the other after renderer2 like this
XYSeriesRenderer renderer(nameit) = new XYSeriesRenderer();
renderer1.setColor(Color.TRANSPARENT);
XYSeriesRenderer renderer(nameit) = new XYSeriesRenderer();
renderer1.setColor(Color.TRANSPARENT);
and see the magic you got what you want.cheers
Upvotes: 0
Reputation: 1150
If you want to set width of the bars--
try this...
renderer.setBarSpacing(-0.7);
Upvotes: 4
Reputation: 81
The only way that I found to fix your problem is a quite ugly but until they improve colour management in achartengine it might be as good as it gets.
Firstly remove the for-case as per larlins suggestion.
Then add empty points to the other series corresponding to the filled points in the other series:
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);
Also set the BarSpacing
to 0 and the Type
to Type.STACKED
instead of Type.DEFAULT
.
I think it would look better if you removed the Label
and changed the XTitle
to "Outstanding Jobs"
Upvotes: 2