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*/