Гистограмма Mpandroidchart, Как отсортировать данные и сгруппировать их по месяцам, приходящим из Rest API? - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть список данных JSON, в котором есть данные по годам, я хочу отсортировать их и сгруппировать по месяцам внутри гистограммы

Я много пробовал, ноне могу понять, как это сделать?

Вот мой ответ Json:

[
    {
        "Name": "Radiology",
        "Jan": 12,
        "Feb": 7,
        "Mar": 4,
        "Apr": 14,
        "May": 1,
        "Jun": 6,
        "Jul": 9,
        "Aug": 0,
        "Sep": 0,
        "Oct": 0,
        "Nov": 0,
        "Dec": 0,
        "Total": 53
    },
    {
        "Name": "Haematology",
        "Jan": 6,
        "Feb": 16,
        "Mar": 15,
        "Apr": 12,
        "May": 4,
        "Jun": 14,
        "Jul": 15,
        "Aug": 1,
        "Sep": 0,
        "Oct": 0,
        "Nov": 0,
        "Dec": 0,
        "Total": 83
    },
    {
        "Name": "Immunology",
        "Jan": 14,
        "Feb": 18,
        "Mar": 31,
        "Apr": 29,
        "May": 11,
        "Jun": 34,
        "Jul": 13,
        "Aug": 2,
        "Sep": 0,
        "Oct": 0,
        "Nov": 0,
        "Dec": 0,
        "Total": 152
    }
]

Вот моя функция графика:

private void graphData(Response<List<MontlyPatientAnalysisModel>> response) {

        List<BarEntry> entriesJan = new ArrayList<>();
        List<BarEntry> entriesFeb = new ArrayList<>();
        List<BarEntry> entriesMar = new ArrayList<>();
        List<BarEntry> entriesApr = new ArrayList<>();
        List<BarEntry> entriesMay = new ArrayList<>();
        List<BarEntry> entriesJun = new ArrayList<>();
        List<BarEntry> entriesJuly = new ArrayList<>();
        List<BarEntry> entriesAug = new ArrayList<>();
        List<BarEntry> entriesSep = new ArrayList<>();
        List<BarEntry> entriesOct = new ArrayList<>();
        List<BarEntry> entriesNov = new ArrayList<>();
        List<BarEntry> entriesDec = new ArrayList<>();
        List<BarEntry> entriesTotal = new ArrayList<>();

        final List<String> xLabel = new ArrayList<>();
        xLabel.add("Jan");
        xLabel.add("Feb");
        xLabel.add("Mar");
        xLabel.add("Apr");
        xLabel.add("May");
        xLabel.add("Jun");
        xLabel.add("July");
        xLabel.add("Aug");
        xLabel.add("Sep");
        xLabel.add("Oct");
        xLabel.add("Nov");
        xLabel.add("Dec");
        xLabel.add("Total");

        if (response.body() != null) {
            for (MontlyPatientAnalysisModel montlyPatientAnalysisModel : response.body()) {

                entriesJan.add(new BarEntry(2200, montlyPatientAnalysisModel.getJan(), "January"));
                entriesFeb.add(new BarEntry(2200, montlyPatientAnalysisModel.getFeb(), "February"));
                entriesMar.add(new BarEntry(2200, montlyPatientAnalysisModel.getMar(),"March"));
                entriesApr.add(new BarEntry(2200, montlyPatientAnalysisModel.getApr(), "April"));
                entriesMay.add(new BarEntry(2200, montlyPatientAnalysisModel.getMay(), "May"));
                entriesJun.add(new BarEntry(2200, montlyPatientAnalysisModel.getJun(), "Jun"));
                entriesJuly.add(new BarEntry(2200, montlyPatientAnalysisModel.getJul(), "July"));
                entriesAug.add(new BarEntry(2200, montlyPatientAnalysisModel.getAug(), "August"));
                entriesSep.add(new BarEntry(2200, montlyPatientAnalysisModel.getSep(), "September"));
                entriesOct.add(new BarEntry(2200, montlyPatientAnalysisModel.getOct(), "October"));
                entriesNov.add(new BarEntry(2200, montlyPatientAnalysisModel.getNov(), "November"));
                entriesDec.add(new BarEntry(2200, montlyPatientAnalysisModel.getDec(), "December"));
                entriesTotal.add(new BarEntry(2200, montlyPatientAnalysisModel.getTotal(), "Total"));

                final XAxis xAxis = mBarChart.getXAxis();
                xAxis.setLabelCount(entriesJan.size());
                xAxis.setValueFormatter(new IndexAxisValueFormatter() {
                    @Override
                    public String getFormattedValue(float value) {
                        if (value >= 0) {
                            if (value <= xLabel.size() - 1) {
                                return xLabel.get((int) value);
                            }
                            return "";
                        }
                        return "";
                    }
                });
                xAxis.setCenterAxisLabels(true);
                xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
                xAxis.setGranularity(1);
                xAxis.setGranularityEnabled(true);
                xAxis.setTextSize(10);
                xAxis.setTextColor(R.color.colorBlack);

                YAxis leftAxis = mBarChart.getAxisLeft();
                leftAxis.setTextColor(Color.BLACK);
                leftAxis.setTextSize(12);
                leftAxis.setAxisLineColor(Color.WHITE);
                leftAxis.setDrawGridLines(true);
                leftAxis.setGranularity(1);
                leftAxis.setLabelCount(8, true);
            }
        }

        BarDataSet barDataSetJan, barDataSetFeb, barDataSetMar,
                barDataSetApr, barDataSetMay, barDataSetJun, barDataSetJuly,
                barDataSetAug, barDataSetSep, barDataSetOct, barDataSetNov, barDataSetDec, barDataSetTotal;

        barDataSetJan = new BarDataSet(entriesJan, "");
        barDataSetJan.setColor(randomAndroidColor1);

        barDataSetFeb = new BarDataSet(entriesFeb, "");
        barDataSetFeb.setColor(randomAndroidColor2);

        barDataSetMar = new BarDataSet(entriesMar, "");
        barDataSetMar.setColor(randomAndroidColor3);

        barDataSetApr = new BarDataSet(entriesApr, "");
        barDataSetApr.setColor(randomAndroidColor4);

        barDataSetMay = new BarDataSet(entriesMay, "");
        barDataSetMay.setColor(randomAndroidColor5);

        barDataSetJun = new BarDataSet(entriesJun, "");
        barDataSetJun.setColor(randomAndroidColor6);

        barDataSetJuly = new BarDataSet(entriesJuly, "");
        barDataSetJuly.setColor(randomAndroidColor1);

        barDataSetAug = new BarDataSet(entriesAug, "");
        barDataSetAug.setColor(randomAndroidColor2);

        barDataSetSep = new BarDataSet(entriesSep, "");
        barDataSetSep.setColor(randomAndroidColor3);

        barDataSetOct = new BarDataSet(entriesOct, "");
        barDataSetOct.setColor(randomAndroidColor4);

        barDataSetNov = new BarDataSet(entriesNov, "");
        barDataSetNov.setColor(randomAndroidColor5);

        barDataSetDec = new BarDataSet(entriesDec, "");
        barDataSetDec.setColor(randomAndroidColor6);

        barDataSetTotal = new BarDataSet(entriesTotal, "");
        barDataSetTotal.setColor(randomAndroidColor6);

        //add the data
        ArrayList<IBarDataSet> barDataSets = new ArrayList<IBarDataSet>();
        barDataSets.add(barDataSetJan);
        barDataSets.add(barDataSetFeb);
        barDataSets.add(barDataSetMar);
        barDataSets.add(barDataSetApr);
        barDataSets.add(barDataSetMay);
        barDataSets.add(barDataSetJun);
        barDataSets.add(barDataSetJuly);
        barDataSets.add(barDataSetAug);
        barDataSets.add(barDataSetSep);
        barDataSets.add(barDataSetOct);
        barDataSets.add(barDataSetNov);
        barDataSets.add(barDataSetDec);
        barDataSets.add(barDataSetTotal);

        BarData barData = new BarData(barDataSets);
        mBarChart.setData(barData);
        //barData.setValueFormatter(new LargeValueFormatter());

        Description description = new Description();
        description.setText("Growth rate per month");
        description.setTextSize(12);
        //description.setTextColor(Color.parseColor("#607d8b"));
        mBarChart.setDescription(description);

        float barSpace = 0.011f;
        float groupSpace = 0.085f;
        barData.setBarWidth(0.05f);

        mBarChart.getXAxis().setAxisMinimum(0);
        mBarChart.getXAxis().setAxisMaximum(0 + mBarChart.getBarData().getGroupWidth(groupSpace, barSpace)*15);
        mBarChart.getAxisLeft().setAxisMinimum(0);
        mBarChart.groupBars(0, groupSpace, barSpace);
        mBarChart.fitScreen();
        mBarChart.zoom(3.1f, 1.5f, 0, 0);

        //mBarChart.setVisibility(View.VISIBLE);
        mBarChart.animateY(1000);
        mBarChart.setDragEnabled(true);
        //mBarChart.setVisibleXRangeMinimum(0);
        mBarChart.setVisibleXRangeMaximum(15);

        //ChartUtils.removeOutdatedEntries(barDataSetJan);
        mBarChart.setVisibleYRangeMaximum(3000, YAxis.AxisDependency.LEFT);
        barData.setDrawValues(true);
        //barData.notifyDataChanged();
        mBarChart.getData().notifyDataChanged();
        mBarChart.notifyDataSetChanged();
        mBarChart.invalidate();
        //mBarChart.refreshDrawableState();
    }

enter image description here

Здесь вы видите все данные за год, показанные в январе, я ожидаю, что все данные за январь за одинместо, но оно дает мне все данные за год в январе.

Теперь, где я ошибся?

Как я могу решить эту проблему?

...