私はMPAndroidChartを使用しようとしています。 私が使用したバージョン(インターネット上のチュートリアルの後)から多くの変更があり、電話画面で正しく表示できませんでした。MPAndroidChart - 関連するX軸の位置にデータを正しく表示する方法
私は3つの棒グラフを表示したいと思います。ここに私の問題です:
- バーは、2つのバーが他に1つずつ表示されているその関連軸スポット(と彼らがする必要があります)、
- に沿ったものではない、と私は彼らが離れていたいです、
- 2 "9月"については、後でコードをチェックします。ここで
私は私のリストにつかむものです>:ここで
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;
}
}
で試してみてくださいこれは:XAxis xAxis = chart.getXAxis(); xAxis.setGranularity(1f); xAxis.setGranularityEnabled(true); xAxis.setLabelCount(12、true); – AndroidRuntimeException
こんにちはAugustin、最終的に私のデータを自分のX軸に合わせることができます。 2つのバーの部分だけが残っています(赤と緑は別のバーです)。 – Alexandre