2012-10-23 63 views
2

我有一個BarChart,其中一些值設置爲MathHelper.NULL_VALUE,因此它們不會呈現(它應該在圖表中留下空白位置)。但是,空值仍然呈現,看起來更像0.0,如下所示。AChartEngine呈現空值

null values

如果我登錄打印我可以看到NULL_VALUEs出現在該系列中的值:

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和空並留下指出條形圖導致一些進一步的奇渲染(空白空間是不正確的寬度)...

有誰知道區分如何不在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

+0

向我們展示一些代碼,否則我們無法提供幫助。 –

+0

公平點,補充。 – DavidBriggs

+0

請注意,您添加的代碼會在屏幕截圖顯示其他內容時顯示某些內容。 –

回答

0

我建議你不要添加MathHelper.NULL_VALUE值。只需添加其他的。

+0

感謝您的關注Dan!真的愛AChartEngine!我添加了示例代碼在沒有空值的情況下生成的屏幕截圖。 – DavidBriggs

+0

很酷。所以它看起來像解決了你的問題? –

+0

對不起。看看現在酒吧之間沒有間隙,缺少點的空間寬度與空值差別有多大? – DavidBriggs

0

我認爲你的意圖是使這些MathHelper.NULL_VALUE欄爲空白,所以你可以設置這些欄顏色。透明,以便他們不會看到,如果你的意圖是wt我說。如果你想顯示這些欄你可以將這些值作爲{}空白。

+0

hello ..這是可能的折線圖嗎?我使用這個,但只是得到點沒有看到這一點之間的界限。所以任何想法 –