2017-04-18 100 views
1

私は各データで一緒にグループ化された3種類のデータセットがそうのような点に棒グラフを作りたい:MPAndroidChart棒グラフ - グループ間にランダムなx軸間隔の棒をグループ化する方法は?

enter image description here

しかし、私はグループすることができませんバーが一緒に関係なくので、ライブラリの提供groupBarsメソッドを使用してエントリに設定したx値は、パラメータで指定した間隔に従ってバーをグループ化します。

たとえば、エントリx値{0、5、13、17 ... 50}を持つデータセットを生成し、 `groupBars 'を呼び出すと、すべてのエントリがx値で1つずつ収集されます。

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

私は同じ問題を抱えており、1週間から解決しようとしています。さらに、私は、 "groupBars"メソッドを使用し、データがたくさんある場合、バーのサイズは変更されませんが、最初のバーだけが表示されていることを確認しました(私は概要を持っていません) あなたはそれを共有してください?もし私が1つを見つけるなら、私は同じことをするでしょう – Grancein

+0

@GracePii私の掲載された解決策を参照 – damememan

答えて

2

私は各バーエントリ、バー幅のxの値を変更することで問題を解決しました。

私は、3つのデータセットで新しいBarDataクラスを作成し、バーの幅を(BAR_WIDTHとしましょう)0.2に設定します(つまり、3つのバーが一緒にスペースで0.6単位を取り、0.4単位の間隔データセットの後)。

私は最初のバーをx値(iとする)に置き、x値の第2のバーをi+BAR_WIDTHに、第3のバーをi+2*BAR_WIDTHに配置します。次のようにhttp://i.imgur.com/KrKTE45l.jpg

は、だから私の上記のコードでは、するバーエントリ作成コードを変更します:

結果は、私が好きなx値を中心とする3バールのエントリのグループ、とても似ています
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

私は解決策が

0123と一緒に

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

を使用することだと思います

を使用して、バーグループの中心にX軸ラベルを設定します。

詳細については、GroupedBarChartセクションのthisを参照してください。

関連する問題