Achartengine XYMultipleSeriesRenderer rendert Diagramme für Nullwerte und zeigt unerwünschte Abstände in s / w-Balken an
Ich habe ein Balkendiagramm mit einer Diagramm-Engine entwickelt und mehrere Reihen mit unterschiedlich farbigen Balken verwendet, basierend auf der Anpassung der Daten.
Wenn jedoch für einen Balken ein Nullwert vorhanden ist, rendert XYmultiseriesrenderer das Diagramm weiterhin und erstellt unerwünschte Abstände zwischen den Balken.
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 a dataset to hold each series
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
// Adding Income Series to the dataset
for(int i= 0 ; i< incomeSeries.length ; i++) {
dataset.addSeries(incomeSeries[i]);
}
//Adding Expense Series to the dataset
dataset.addSeries(expenseSeries);
// Creating a XYMultipleSeriesRenderer to customize the whole chart
XYMultipleSeriesRenderer multiRenderer = buildRenderer(colors);
// Creating an intent to plot bar chart using dataset and 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 to Income series
int i = 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;
for (int i = 0; i < length; i++) {
XYSeriesRenderer r = new XYSeriesRenderer();
r.setColor(colors[i]);
r.setLineWidth(4);
r.setFillPoints(true);
r.setDisplayChartValues(true);
renderer.addSeriesRenderer(r);
}
return renderer;