2017-04-18 153 views
1

我想打一個柱狀圖,在每個數據分組在一起3個不同的數據集指出,像這樣:MPAndroidChart條形圖 - 如何在組之間分組具有隨機X軸間隔的條形圖?

enter image description here

但是,我無法組棒一起使用圖書館提供groupBars方法,因爲無論我爲一個條目設置了什麼x值,它根據我在其參數中指定的時間間隔對條進行分組。例如,如果我使用條目x值{0,5,13,​​17 ... 50}生成一個數據集並調用「groupBars」,那麼我的所有條目都會按照x值分開收集,如下所示:1 2 3 4 5 6 7 8 9 10

enter image description here

我要的是酒吧的每個分組,並且每個可見在其指定的x值。如果我只是刪除了groupBars電話,我得到類似於我想要什麼,但事情並不完全,因爲酒吧都是重疊的,就像這樣:

enter image description here

如何實現的結果與上述類似的圖像,但每個數據集的欄都完全可見?這是我的用於生成數據集和分組杆代碼:

 ArrayList<BarEntry> happinessValues = new ArrayList<>(); 
     ArrayList<BarEntry> stressValues = new ArrayList<>(); 
     ArrayList<BarEntry> painValues = new ArrayList<>(); 

     for (int i = 0; i < 50; ++i) { 
      happinessValues.add(new BarEntry(
        i, 
        datapoint.getHappiness())); 
      stressValues.add(new BarEntry(
        i, 
        datapoint.getStress())); 
      painValues.add(new BarEntry(
        i, 
        datapoint.getPain())); 
     } 

     HappinessDataset happyDataset; 

     BarDataSet stressDataset, painDataset; 

      happyDataset = new HappinessDataset(happinessValues, "Happiness"); 

      stressDataset = new BarDataSet(stressValues, "Stress"); 

      painDataset = new BarDataSet(painValues, "Pain"); 

      BarData data = new BarData(happyDataset, stressDataset, painDataset); 

      mChart.setData(data); 

     mChart.getXAxis().setAxisMinimum(0); 
     mChart.getXAxis().setAxisMaximum(50); 


     float groupSpace = 0.4f; 
     float barSpace = 0f; // x3 DataSet 
     float barWidth = 0.2f; // x3 DataSet 
     // (0.2 + 0) * 3 + 0.4 = 1.00 -> interval per "group" 
     mChart.groupBars(startTime, groupSpace, barSpace); 
+0

我有同樣的問題,我試圖從一個星期內解決它。此外,我看到如果我使用「groupBars」方法,並且我有很多數據,條不會調整大小,但我只看到第一個條(我沒有概述) 如果您發現解決方案可能你分享一下嗎?我會做同樣的,如果我找到一個 – Grancein

+0

@GracePii看到我發佈的解決方案 – damememan

回答

2

我已通過修改每個條條目和條寬的x值解決了這個問題。

我使用三個數據集創建一個新的BarData類,並將條寬設置爲0.2(即三條一起在空間中佔用0.6個單位,並且間距爲0.4單位在數據集之後)。

對於任何給定的酒吧條目,我將我的第一個酒吧放在我想要的x值(我們稱之爲i),我的第二個酒吧在x值i+BAR_WIDTH,第三個酒吧在i+2*BAR_WIDTH。其結果是一組3個條目中的任何x值我想中心,像這樣:

http://i.imgur.com/KrKTE45l.jpg

所以在我上面的代碼,修改條形碼條目創建代碼如下:

final float BAR_WIDTH = 0.2f; 

    happinessValues.add(new BarEntry(
         i, 
         datapoint.getHappiness())); 
       stressValues.add(new BarEntry(
         i + BAR_WIDTH, 
         datapoint.getStress())); 
       painValues.add(new BarEntry(
         i + 2 * BAR_WIDTH, 
         datapoint.getPain())); 

mChart.getBarData().setBarWidth(BAR_WIDTH); 
+0

非常好的解決方案。這個對我有用。大! – Grancein

+0

但是如何對齊x軸標籤?他們不是很少左對齊嗎? – Amit

0

我認爲解決方案是使用

barChart.groupBars(fromX, groupSpace, barSpace); 
barChart.notifyDataSetChanged() 

隨着

XAxis xAxis = chart.getXAxis(); 
xAxis.setCenterAxisLabels(true); 

爲了將X軸標籤設置到條形組的中心。

有關更多詳細信息,請參閱this的GroupedBarChart部分。