【问题标题】:Pie chart display Non-Null Values饼图显示非空值
【发布时间】:2012-07-04 11:22:20
【问题描述】:

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

【问题讨论】:

  • 在将数组传递给渲染器对象之前,为什么不从数组中删除所有不需要的条目?
  • 我认为您需要重新表述这个问题 - 为什么要添加从零开始的值?你真正想做的是什么?
  • 如果有人知道这个问题的答案,请分享给我......
  • 尝试将你的双精度值装箱到一个 Double 对象中,即不要说“0.0”,而是说“新 Double(0.0)” - 请参阅下面我编辑的评论

标签: android pie-chart achartengine


【解决方案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]));   
}

【讨论】:

  • 如果我喜欢这样,那么问题就出现了,因为渲染器无法设置。所以我们应该匹配所有 30 个条目。我通过颜色值定义了 30 个条目以区分这 30 个条目。
  • 尝试编辑 - 我也有一个想法 - 在插入“双”类型时可能会遇到装箱问题 - 使用装箱的“双”类型(国会大厦 D)
  • 我将尝试通过编码步骤来防止出现空值。
【解决方案2】:

如果您不想显示 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。

【讨论】:

  • 感谢您的回复 [Quintin Balsdon]。但这在我的编码中不起作用。我正在使用 categoryseries 设置,没有选项作为设置值。请看我的编码............
【解决方案3】:

在显示图表视图之前像我为 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);

【讨论】:

    猜你喜欢
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多