MPAndroidChart 每周数据
MPAndroidChart Weekly data
因此,我正在尝试使用 MPAndroidChart 制作包含当前周数据与前几周数据的每周图表。我可以很好地完成单条,并且一切都排成一行,但是当我尝试进行多条组时,它会执行以下操作。
还有什么我需要做的吗?我每天每组只有 2 个小节。这是我当前的代码:
BarData barDataPayments = new BarData(barDataSetCurrentWeek, barDataSetPrevWeek);
barChartPayments.setData(barDataPayments);
XAxis xAxisPayments = barChartPayments.getXAxis();
xAxisPayments.setValueFormatter(new IndexAxisValueFormatter(labelWeekdayNames));
xAxisPayments.setYOffset(5);
xAxisPayments.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxisPayments.setLabelCount(labelWeekdayNames.size());
xAxisPayments.setGranularity(1f);
xAxisPayments.setCenterAxisLabels(false);
xAxisPayments.setDrawGridLines(false);
float groupSpace = 0.08f;
float barSpace = 0.03f;
float barWidth = 0.2f;
barDataPayments.setBarWidth(barWidth);
barChartPayments.getXAxis().setAxisMinimum(0);
barChartPayments.getXAxis().setAxisMaximum(0 + barChartPayments.getBarData().getGroupWidth(groupSpace, barSpace) * 14);
barChartPayments.groupBars(0, groupSpace, barSpace);
barChartPayments.invalidate();
这里我有一个片段可能对你有帮助,
BarData barData = new BarData();
int i=10;
for (ExpenseData expenseData : results) {
List<BarEntry> barEntryList = new ArrayList<>();
barEntryList.add(new BarEntry(i, (float) expenseData.getBalance()));
BarDataSet barDataSet = new BarDataSet(barEntryList, expenseData.getCategory());
int rand = (int) (i*Math.random());
barDataSet.setBarBorderWidth(1);
barDataSet.setBarBorderColor(Color.rgb(rand,i*20,i));
barDataSet.setColor(Color.rgb(rand,i*20,i));
barData.addDataSet(barDataSet);
i+=10;
}
barChart.setData(barData);
所以我最终要做的就是手动设置数据。稍微调整了一下,就达到了我想要的效果,我相信还有更合适的方法,但到目前为止,这是我目前找到的最简单的方法。
xAxisMiles.setYOffset(0); // <---- CHANGED TO ZERO
xAxisMiles.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxisMiles.setLabelCount(labelWeekdayNames.size());
xAxisMiles.setGranularity(1f);
xAxisMiles.setCenterAxisLabels(true); // <---- SET TO TRUE
xAxisMiles.setDrawGridLines(false);
//IMPORTANT *****
barDataPayments.setBarWidth(0.40f);
barDataPayments.getXAxis().setAxisMinimum(0);
barDataPayments.getXAxis().setAxisMaximum(7);
barDataPayments.groupBars(0, 0.10f, 0.05f);
//***** IMPORTANT*/
因此,我正在尝试使用 MPAndroidChart 制作包含当前周数据与前几周数据的每周图表。我可以很好地完成单条,并且一切都排成一行,但是当我尝试进行多条组时,它会执行以下操作。
BarData barDataPayments = new BarData(barDataSetCurrentWeek, barDataSetPrevWeek);
barChartPayments.setData(barDataPayments);
XAxis xAxisPayments = barChartPayments.getXAxis();
xAxisPayments.setValueFormatter(new IndexAxisValueFormatter(labelWeekdayNames));
xAxisPayments.setYOffset(5);
xAxisPayments.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxisPayments.setLabelCount(labelWeekdayNames.size());
xAxisPayments.setGranularity(1f);
xAxisPayments.setCenterAxisLabels(false);
xAxisPayments.setDrawGridLines(false);
float groupSpace = 0.08f;
float barSpace = 0.03f;
float barWidth = 0.2f;
barDataPayments.setBarWidth(barWidth);
barChartPayments.getXAxis().setAxisMinimum(0);
barChartPayments.getXAxis().setAxisMaximum(0 + barChartPayments.getBarData().getGroupWidth(groupSpace, barSpace) * 14);
barChartPayments.groupBars(0, groupSpace, barSpace);
barChartPayments.invalidate();
这里我有一个片段可能对你有帮助,
BarData barData = new BarData();
int i=10;
for (ExpenseData expenseData : results) {
List<BarEntry> barEntryList = new ArrayList<>();
barEntryList.add(new BarEntry(i, (float) expenseData.getBalance()));
BarDataSet barDataSet = new BarDataSet(barEntryList, expenseData.getCategory());
int rand = (int) (i*Math.random());
barDataSet.setBarBorderWidth(1);
barDataSet.setBarBorderColor(Color.rgb(rand,i*20,i));
barDataSet.setColor(Color.rgb(rand,i*20,i));
barData.addDataSet(barDataSet);
i+=10;
}
barChart.setData(barData);
所以我最终要做的就是手动设置数据。稍微调整了一下,就达到了我想要的效果,我相信还有更合适的方法,但到目前为止,这是我目前找到的最简单的方法。
xAxisMiles.setYOffset(0); // <---- CHANGED TO ZERO
xAxisMiles.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxisMiles.setLabelCount(labelWeekdayNames.size());
xAxisMiles.setGranularity(1f);
xAxisMiles.setCenterAxisLabels(true); // <---- SET TO TRUE
xAxisMiles.setDrawGridLines(false);
//IMPORTANT *****
barDataPayments.setBarWidth(0.40f);
barDataPayments.getXAxis().setAxisMinimum(0);
barDataPayments.getXAxis().setAxisMaximum(7);
barDataPayments.groupBars(0, 0.10f, 0.05f);
//***** IMPORTANT*/