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;

Antworten auf die Frage(1)

Ihre Antwort auf die Frage