饼图显示非空值

时间:2012-07-04 11:22:20

标签: android pie-chart achartengine

我正在使用AChartEngine库处理饼图。在这里,我想禁用图表值,以便在图表上显示,但只有那些内容值为0的图表。如果有人知道,请与我分享。

值编码:

                    pchart=ChartFactory.getPieChartView(this,buildCategoryDataset("Daily Basis", values),renderer);

                    re.addView(pchart);
                    }
                }

BuildCategory渲染器:

 protected DefaultRenderer buildCategoryRenderer(int[] colors) {
        DefaultRenderer renderer = new DefaultRenderer();
        renderer.setLabelsTextSize(10);
        renderer.setLegendTextSize(15);
        renderer.setShowLegend(true);

        renderer.setExternalZoomEnabled(true);
        renderer.setZoomEnabled(true);
        renderer.setZoomButtonsVisible(true);
        renderer.setShowAxes(true);
      //  renderer.setMargins(new int[] { 20, 30, 15, 0 });
        for (int color : colors) {
          SimpleSeriesRenderer r = new SimpleSeriesRenderer();
          r.setColor(color);
          renderer.addSeriesRenderer(r);
        }
        return renderer;
      }

DataSet Here:

 protected CategorySeries buildCategoryDataset(String title, double[] values) {
CategorySeries series = new CategorySeries(title);
int k = 0,year;
String str_year;
str_year=String.valueOf(Math.round(values[0]));
Log.i("Invent","Year"+str_year);

year=Integer.parseInt(str_year);
Log.i("Invent","YearInt"+year);
    if(flag_val==1)
    {
        for(k=0;k<tot_yearno-1;k++)
        {
            if(values[k]==0)
        {  
        series.add(0.0);     /// Here some settings for display null value.But **here i Want to display nothing Only.** 
        }
            else
            series.add("" + year_first++, values[k]);   
        }
    }
    if(flag_val==0)
    {
    for (double value : values) {    

        if(value==0)
        {
        series.add("" + ++k, 0.0);
        }
        else
  series.add("Day " + ++k, value);
}
    }
return series;
        }
      }

3 个答案:

答案 0 :(得分:1)

你在这做什么:

 if(values[k]==0)
    {  
    series.add(0.0);     /// Here some settings for display null value.But **here i Want to display nothing Only.** 
    }
        else
        series.add("" + year_first++, values[k]);   
    }

你应该这样做:

if(values[k] != 0) //or possibly (values[k] >= 0) since you cannot show negatives either
{  
    series.add("" + year_first++, values[k]);   
}

编辑:然后尝试:

if(values[k]==0)
{  
    series.add("" + year_first++, new Double(0.0));      
}
else
{
    series.add("" + year_first++, new Double(values[k]));   
}

答案 1 :(得分:0)

如果您不希望显示0值,请不要将它们添加到数据集中。

查看PieChartView中的createDataSet作为示例 - 在那里他们添加带有标签的值。

private staticPieDataSet createDataSet(){
    DefaultPieDataset dataset = new DefaultPieDataset();
    dataset.setValue("One", new Double(43.2));
}

现在当你添加自己的值时(我不知道你是怎么做的,但我将它们传递给bundle数据类型,然后为以下方法提取它们),你就不能根据值添加:

private staticPieDataSet createDataSet(Double[] values, String[] labels){
    DefaultPieDataset dataset = new DefaultPieDataset();
    for(int i = 0; i < values.length; i++){
        if (value[i] > 0)
            dataset.setValue(labels[i], values[i]);
    }
}

PS !!!我不建议这样做 - 您的用户可能会对为什么某些数据显示而其他数据不显示感到困惑 - 而是将值放在带括号的括号中,以便他们可以看到此值为0.

答案 2 :(得分:0)

在显示图表视图之前,按照这种方式执行此操作,就像我为TimeChart所做的那样

    for(int i=0;i<selectedCollectionY.size();i++)
    {
        if(selectedCollectionY.get(i).equalsIgnoreCase("0"))
        {
            selectedCollectionY.remove(i);
            selectedCollectionX.remove(i);
        }
    }
    View mView = null;
    mView = ChartFactory.getTimeChartView(GraphActivity.this, Line_Chart
            .getLineDemoDataset(mSpinner.getSelectedItem().toString(),
                    selectedCollectionX, selectedCollectionY), Line_Chart
            .getLineDemoRenderer(mSpinner.getSelectedItem().toString()),
            "MMM dd");
    mView.setLayoutParams(new LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT));
    mLinearLayout.removeAllViews();
    mLinearLayout.addView(mView);