java - AChartEngine 呈现空值

标签 java android achartengine

我有一个 BarChart,它有一些值设置为 MathHelper.NULL_VALUE,所以它们不会被渲染(它应该在图表中留下空白位置)。但是,空值仍会呈现并且看起来更像 0.0,如下所示。

null values

如果我记录打印的值,我可以看到该系列中存在 NULL_VALUE:

10-23 09:50:24.206: DEBUG/ConsumptionChartBuilder(27359): x:16.0Y:1.0
10-23 09:50:24.206: DEBUG/ConsumptionChartBuilder(27359): x:17.0Y:3.0
10-23 09:50:24.206: DEBUG/ConsumptionChartBuilder(27359): x:18.0Y:1.7976931348623157E308
10-23 09:50:24.206: DEBUG/ConsumptionChartBuilder(27359): x:19.0Y:1.7976931348623157E308
10-23 09:50:24.216: DEBUG/ConsumptionChartBuilder(27359): x:20.0Y:6.0
10-23 09:50:24.216: DEBUG/ConsumptionChartBuilder(27359): x:21.0Y:1.7976931348623157E308

设置/取消设置最小 Y 值不会改变任何东西。

我真的需要区分 0 和 null 并且将点留在条形图之外会导致一些更奇怪的渲染(空格不是正确的宽度)...

有谁知道如何在 AChartEngine BarChart 中不呈现空值?

编辑:一些重现它的代码。

    XYMultipleSeriesDataset multipleSeriesDataset = new XYMultipleSeriesDataset();
    XYMultipleSeriesRenderer multipleSeriesRenderer = new XYMultipleSeriesRenderer();
    XYSeriesRenderer renderer= new XYSeriesRenderer();

    //set up renderer(s)
    renderer.setColor(Color.RED);
    multipleSeriesRenderer = new XYMultipleSeriesRenderer();
    multipleSeriesRenderer.setInScroll(true);
    multipleSeriesRenderer.setPanEnabled(false, false);
    multipleSeriesRenderer.setZoomEnabled(false, false);
    multipleSeriesRenderer.setAntialiasing(true);
    multipleSeriesRenderer.setShowLabels(true);
    multipleSeriesRenderer.setShowLegend(false);
    multipleSeriesRenderer.setYLabelsAlign(Paint.Align.LEFT);
    multipleSeriesRenderer.setApplyBackgroundColor(true);
    multipleSeriesRenderer.setMargins(new int[]{20, 3, 0, 0});
    multipleSeriesRenderer.setMarginsColor(Color.WHITE);
    multipleSeriesRenderer.addSeriesRenderer(renderer);
    multipleSeriesRenderer.setXLabelsAlign(Paint.Align.CENTER);
    //text size
    final float scale = getResources().getDisplayMetrics().density;
    multipleSeriesRenderer.setLabelsTextSize((int)(scale*10+0.5f));

    multipleSeriesRenderer.setXLabelsColor(Color.BLACK);
    multipleSeriesRenderer.setYLabelsColor(0,Color.BLACK);
    multipleSeriesRenderer.setShowAxes(false);
    multipleSeriesRenderer.setBackgroundColor(Color.TRANSPARENT);

    //set max and min of axis
    multipleSeriesRenderer.setYAxisMin(0);
    multipleSeriesRenderer.setYAxisMax(10);
    multipleSeriesRenderer.setXAxisMax(7.5);
    multipleSeriesRenderer.setXAxisMin(0.5);
    multipleSeriesRenderer.setBarSpacing(0.1);

    //set up series
    XYSeries series = new XYSeries("test");
    series.add(1, MathHelper.NULL_VALUE);
    series.add(2, 1);
    series.add(3, 6);
    series.add(4, MathHelper.NULL_VALUE);
    series.add(5, 0);
    series.add(6, 5);
    series.add(7, MathHelper.NULL_VALUE);
    multipleSeriesDataset.addSeries(series);

    //add x labels to replicate my original code
    multipleSeriesRenderer.setXLabels(0);
    multipleSeriesRenderer.addXTextLabel(1, "Mon");
    multipleSeriesRenderer.addXTextLabel(2, "Tue");
    multipleSeriesRenderer.addXTextLabel(3, "Wed");
    multipleSeriesRenderer.addXTextLabel(4, "Thu");
    multipleSeriesRenderer.addXTextLabel(5, "Fri");
    multipleSeriesRenderer.addXTextLabel(6, "Sat");
    multipleSeriesRenderer.addXTextLabel(7, "Sun");

    ((LinearLayout)findViewById(R.id.layout_graph)).addView(ChartFactory.getBarChartView(this, multipleSeriesDataset, multipleSeriesRenderer, BarChart.Type.DEFAULT));

编辑编号2:以上代码截图:

空值:

screenshot with null values

如果我不添加空值,那么图形看起来会像此处所示的那样倾斜,其中条形相互接触。

screenshot without null values

最佳答案

我建议您不要添加 MathHelper.NULL_VALUE 值。只需添加其他的即可。

关于java - AChartEngine 呈现空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13025981/

相关文章:

android - 如何在折线图中添加目标线 - AChartEngine

Android 绘制带 X 轴和 Y 轴的条形图

java - jsoup 意外行为并查找类的所有 div

java - 包装 Class<?> 类型泛型错误

Android Intent 检查/查看电子邮件

javascript - 如何从 webView.evaluateJavascript 回调返回值?

java - aChartEngine 中的日期图表

java - 如何从知道其值的单元格地址中捕获@id - Webdriver java

Java itext 换行大小

java - 制作图片拼贴和编辑(布局、背景、框架、文本、滤镜)