android - Achartengine XYMultipleSeriesRenderer renderes chart for null values and shows undesired spacing b/.w bars -
i have developed bar chart using chart engine, , have used multiple series showing different colored bars on basis of customisation done on data.
but when there null value 1 bar , xymultiseriesrenderer still renders chart , creates undesired spaces between bars.
private void openchart(){ //int[] x = { 0,1,2,3,4,5,6,7,8,9}; int[] income = { 230,220,230,250,270,300,280,350,370,400}; int[] expense = {220, 270, 290, 280, 260, 300, 330, 340}; int[] colors = {color.green,color.yellow , color.red , color.blue}; xyseries[] incomeseries = addincomeseriestodataset(income); xyseries expenseseries = constructexpenseseries(expense); // creating dataset hold each series xymultipleseriesdataset dataset = new xymultipleseriesdataset(); // adding income series dataset for(int i= 0 ; i< incomeseries.length ; i++) { dataset.addseries(incomeseries[i]); } //adding expense series dataset dataset.addseries(expenseseries); // creating xymultipleseriesrenderer customize whole chart xymultipleseriesrenderer multirenderer = buildrenderer(colors); // creating intent plot bar chart using dataset , multiplerenderer intent intent = chartfactory.getbarchartintent(getbasecontext(), dataset, multirenderer, type.default); // start activity startactivity(intent); }private xyseries[] addincomeseriestodataset(int[] income){ xyseries[] incomeseries = {new xyseries("income<=250") , new xyseries("income<320") , new xyseries("income>320")}; // adding data income series int = 0; int sizex = mmonth.length; int incomeitemscount = income.length; while(i<sizex && i<incomeitemscount){ if(income[i] <= 250) { incomeseries[0].add(i, income[i]); } else if(income[i] <= 320) { incomeseries[1].add(i, income[i]); } else { incomeseries[2].add(i, income[i]); } i++; } return incomeseries; } private xyseries constructexpenseseries(int[] expense) { xyseries expenseseries = new xyseries("expense"); int i=0; int sizex = mmonth.length; int expenseitemscount = expense.length; while(i<sizex && i< expenseitemscount) { expenseseries.add(i,expense[i]); i++; } return expenseseries; } private xymultipleseriesrenderer buildrenderer(int[] colors) { xymultipleseriesrenderer renderer = new xymultipleseriesrenderer(); renderer.setaxistitletextsize(16); renderer.setcharttitletextsize(20); renderer.setlabelstextsize(15); renderer.setlegendtextsize(15); renderer.setxlabels(0); renderer.setaxescolor(color.blue); renderer.setxlabelscolor(color.blue); renderer.setylabelscolor(0,color.blue); renderer.setxlabelsalign(align.center); renderer.setcharttitle("income vs expense chart"); renderer.setxtitle("year 2012"); renderer.setylabelsalign(align.right); renderer.setlabelscolor(color.blue); renderer.setytitle("amount in dollars"); renderer.setbarspacing(1.0); renderer.setmarginscolor(color.white); renderer.setapplybackgroundcolor(true); renderer.setbackgroundcolor(color.white); renderer.setmargins(new int[] { 20, 30, 15, 0 }); renderer.setzoombuttonsvisible(true); for(int i=0; i< mmonth.length ;i++){ renderer.addxtextlabel(i, mmonth[i]); } int length = colors.length; (int = 0; < length; i++) { xyseriesrenderer r = new xyseriesrenderer(); r.setcolor(colors[i]); r.setlinewidth(4); r.setfillpoints(true); r.setdisplaychartvalues(true); renderer.addseriesrenderer(r); } return renderer;
you have setbarspacing(1.0) call in code. remove that.
Comments
Post a Comment