Achartengine XYMultipleSeriesRenderer renderes图表空值,并显示不需要的间距B / .W酒吧不需要、间距、图表、酒吧

2023-09-06 06:21:04 作者:彼岸花乀花开花落

我已经开发了使用图表引擎条形图,我已经使用了多系列表示定制的基础上的数据上完成不同的彩色条。

不过,当有一栏为空值,XYmultiseriesrenderer仍然呈现图表,并创建了条之间不需要的空间。

 私人无效openChart(){
            // INT []×= {0,1,2,3,4,5,6,7,8,9};
            INT []所得税= {230,220,230,250,270,300,280,350,370,400};
            INT []费用= {220,270,290,280,260,300,330,340};
            INT []颜色= {Color.GREEN,Color.YELLOW,Color.RED,Color.BLUE};

            XYSeries [] incomeSeries = addIncomeSeriestoDataSet(收入);
            XYSeries expenseSeries = constructExpenseSeries(费用自理);
            //创建一个数据集来保存每个系列
            XYMultipleSeriesDataset数据集=新XYMultipleSeriesDataset();
            //增加收入系列的数据集
            的for(int i = 0; I< incomeSeries.length;我++){
                dataset.addSeries(incomeSeries [I]);
            }
            //添加费用系列的数据集
            dataset.addSeries(expenseSeries);

            //创建一个XYMultipleSeriesRenderer自定义整个图表
            XYMultipleSeriesRenderer multiRenderer = buildRenderer(颜色);

            //创建一个意图情节线图使用的数据集和multipleRenderer
            意向意图= ChartFactory.getBarChartIntent(getBaseContext(),数据集,multiRenderer,

    Type.DEFAULT);
      //开始活动
            startActivity(意向);

        }私人XYSeries [] addIncomeSeriestoDataSet(INT []收入){
            XYSeries [] incomeSeries = {新XYSeries(收入及LT; = 250),新XYSeries(收入及LT; 320),新

    XYSeries(收入> 320)};
            //将数据添加到收入系列
            INT I = 0;
            INT SIZEX = mMonth.length;
            INT incomeItemsCount = income.length;

            而(I< SIZEX和放大器;&安培; I< incomeItemsCount){
                如果(收入[1]  -  = 250){
                    incomeSeries [0]。新增(ⅰ,收入[I]);
                                }否则如果(收入[1]  -  = 320){

                    incomeSeries [1]。新增(ⅰ,收入[I]);

                } 其他 {

                incomeSeries [2]。新增(ⅰ,收入[I]);
                }
               我++;
            }
            返回incomeSeries;
        }

        私人XYSeries constructExpenseSeries(INT []费用){
            XYSeries expenseSeries =新XYSeries(费用);
               INT I = 0;
               INT SIZEX = mMonth.length;
               INT expenseItemsCount = expense.length;
               而(I< SIZEX和放大器;&安培; I< expenseItemsCount){
                    expenseSeries.add(我,费[I]);
                    我++;
                }
              返回expenseSeries;
        }
        私人XYMultipleSeriesRenderer buildRenderer(INT []颜色){
            XYMultipleSeriesRenderer渲染器=新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(收入与费用表);
            renderer.setXTitle(2012年);
            renderer.setYLabelsAlign(Align.RIGHT);
            renderer.setLabelsColor(Color.BLUE);
            renderer.setYTitle(中的美元金额);
            renderer.setBarSpacing(1.0);
            renderer.setMarginsColor(Color.WHITE);
            renderer.setApplyBackgroundColor(真正的);
            renderer.setBackgroundColor(Color.WHITE);
            renderer.setMargins(新INT [] {20,30,15,0});
            renderer.setZoomButtonsVisible(真正的);
            的for(int i = 0; I< mMonth.length;我++){
                renderer.addXTextLabel(ⅰ,mMonth [I]);
            }
            INT长度= colors.length;
            的for(int i = 0; I<长度;我++){
                XYSeriesRenderer R =新XYSeriesRenderer();
                r.setColor(颜色[I]);
                r.setLineWidth(4);
                r.setFillPoints(真正的);
                r.setDisplayChartValues​​(真正的);
                renderer.addSeriesRenderer(r)的;
            }
            返回渲染器;
 

解决方案

您的code进行 setBarSpacing(1.0)通话。只是删除。

I have developed a bar chart using a chart engine, and I have used multiple series showing different colored bars on the basis of customisation done on the data.

Android图表日历控件组件

But when there is null value for one bar , XYmultiseriesrenderer still renders the chart and creates undesired spaces between the 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 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;

解决方案

You have a setBarSpacing(1.0) call in your code. Just remove that.