2016-12-14 85 views
-1

私はMPAndroidChartを使用しようとしています。 私が使用したバージョン(インターネット上のチュートリアルの後)から多くの変更があり、電話画面で正しく表示できませんでした。MPAndroidChart - 関連するX軸の位置にデータを正しく表示する方法

私は3つの棒グラフを表示したいと思います。ここに私の問題です:

  1. バーは、2つのバーが他に1つずつ表示されているその関連軸スポット(と彼らがする必要があります)、
  2. に沿ったものではない、と私は彼らが離れていたいです、
  3. 2 "9月"については、後でコードをチェックします。ここで

enter image description here

私は私のリストにつかむものです>:ここで

Month  Loan  Borrow 
7   15  5 
8   0  5.7 
10  102.4 2 
11  15  5 
12  25.5  35.5 

は私の棒グラフを表示するためのコードです。

  • CustomYAxisValueFormatter、
  • MonthAxisValueFormatter
  • ここ

private void moneyBarChart(){ 
     BarChart barChart = (BarChart) findViewById(R.id.chart); 
     barChart.getDescription().setText(getResources().getString(R.string.money_bar_chart)); 
     MonthConverter monthConverter = new MonthConverter(this); 
     //HorizontalBarChart barChart= (HorizontalBarChart) findViewById(R.id.chart); 

     List<List<Float>> amountByMonth = dbHandlers.getDbMoneyHandler().getLastSixMonthsMoney(); 

     ArrayList<String> labels = new ArrayList<>(); 
     ArrayList<BarEntry> loan = new ArrayList<>(); 
     ArrayList<BarEntry> borrow = new ArrayList<>(); 

     List<Float> temp = amountByMonth.get(0); 
     int position = 0; 
     int currentMonth = calendar.get(Calendar.MONTH); 
     int j = 5; 

     barChart.getXAxis().setAxisMinimum((float) currentMonth - j); 
     barChart.getXAxis().setAxisMaximum((float) currentMonth); 

     for (int i=0; i<amountByMonth.size(); i++) { 
      while (currentMonth - j != Math.round(temp.get(i * 3))-1){ 
       labels.add(monthConverter.convert(currentMonth - j)); 
       loan.add(new BarEntry(currentMonth - j, 0f)); 
       borrow.add(new BarEntry(currentMonth - j, 0f)); 
       j-=1; 
       position++; 
      } 
      labels.add(monthConverter.convert(Math.round(temp.get(i * 3)))); 
      loan.add(new BarEntry(Math.round(temp.get(i * 3)-1), Math.round(temp.get(i * 3 + 1)))); 
      borrow.add(new BarEntry(Math.round(temp.get(i * 3)-1), Math.round(temp.get(i * 3 + 2)))); 
      position++; 
      j-=1; 
     } 

     BarDataSet barDataSet1 = new BarDataSet(loan, getResources().getString(R.string.type_loan)); 
     barDataSet1.setColor(Color.rgb(0, 155, 0)); 
     //barDataSet1.setColors(ColorTemplate.COLORFUL_COLORS); 

     BarDataSet barDataSet2 = new BarDataSet(borrow, getResources().getString(R.string.type_borrow)); 
     barDataSet2.setColor(Color.rgb(155, 0, 0)); 
     //barDataSet2.setColors(ColorTemplate.COLORFUL_COLORS); 

     ArrayList<IBarDataSet> dataset = new ArrayList<>(); 
     dataset.add(barDataSet1); 
     dataset.add(barDataSet2); 

     //BarData data = new BarData(labels, dataset); 
     BarData data = new BarData(dataset); 
     barChart.setData(data); 
     barChart.getXAxis().setValueFormatter(new MonthAxisValueFormatter(barChart, this)); 
     barChart.invalidate(); 
     barChart.animateY(2000); 
     barChart.getBarData().setBarWidth(0.5f); 


     data.setValueFormatter(new CustomYAxisValueFormatter()); 
    } 

それは助けてくださいますが、以下はのためのコードです

public class CustomYAxisValueFormatter implements IValueFormatter { 

    private DecimalFormat mFormat; 

    public CustomYAxisValueFormatter() { 
     mFormat = new DecimalFormat("###,###,###,##0.0"); // sets precision to 1 
    } 

    @Override 
    public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) { 
     return mFormat.format(value); 
    } 
} 

そしてここに:

public class MonthAxisValueFormatter implements IAxisValueFormatter { 

    protected String[] mMonths; 
    private Context context; 

    private BarLineChartBase<?> chart; 

    public MonthAxisValueFormatter(BarLineChartBase<?> chart, Context context) { 
     this.chart = chart; 
     this.context = context; 

     mMonths = new String[]{ 
       this.context.getResources().getString(R.string.january), 
       this.context.getResources().getString(R.string.february), 
       this.context.getResources().getString(R.string.march), 
       this.context.getResources().getString(R.string.april), 
       this.context.getResources().getString(R.string.may), 
       this.context.getResources().getString(R.string.june), 
       this.context.getResources().getString(R.string.july), 
       this.context.getResources().getString(R.string.august), 
       this.context.getResources().getString(R.string.september), 
       this.context.getResources().getString(R.string.october), 
       this.context.getResources().getString(R.string.november), 
       this.context.getResources().getString(R.string.december) 
     }; 
    } 

    @Override 
    public String getFormattedValue(float value, AxisBase axis) { 

     int month = (int) value; 

     String monthName = mMonths[month % mMonths.length]; 

     return monthName; 
    } 
} 
+1

で試してみてくださいこれは:XAxis xAxis = chart.getXAxis(); xAxis.setGranularity(1f); xAxis.setGranularityEnabled(true); xAxis.setLabelCount(12、true); – AndroidRuntimeException

+0

こんにちはAugustin、最終的に私のデータを自分のX軸に合わせることができます。 2つのバーの部分だけが残っています(赤と緑は別のバーです)。 – Alexandre

答えて

0

この例を見てください:https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivityMultiDataset.java

は、オンライン例を参照するには:

https://android-arsenal.com/details/1/741#!liveDemo

あなたはこのような行を追加する必要があります。

float groupSpace = 0.08f; 
float barSpace = 0.03f; // x4 DataSet 
int groupCount = mSeekBarX.getProgress() + 1; 
int startMonth = 0; 
mChart.groupBars(startYear, groupSpace, barSpace); 
関連する問題