У меня есть список данных 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](https://i.stack.imgur.com/eJd4x.png)
Здесь вы видите все данные за год, показанные в январе, я ожидаю, что все данные за январь за одинместо, но оно дает мне все данные за год в январе.
Теперь, где я ошибся?
Как я могу решить эту проблему?