0

我正在使用 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;
      }

数据集在这里:

 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;
        }
      }
4

3 回答 3

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]));   
}
于 2012-07-04T12:11:15.883 回答
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。

于 2012-07-04T11:35:42.550 回答
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);
于 2012-07-04T11:37:28.363 回答