Android中MPhiljay BarChart问题:同一X轴标签对应多值需修正
修复MPAndroidChart同一X轴标签对应多数据列的问题
你的代码存在两个核心问题导致异常:
- 数据条目(
BarEntry)的索引基于原列表顺序生成,但X轴标签是对列表排序后生成的,两者顺序完全不匹配 - 未对同一月份的数据做合并处理,若
reportModelList中存在同一月份的多条数据,自然会出现同一标签对应多个数据列的情况
以下是修复后的完整代码:
viewModel.reportMounthData.observe(this, Observer { reportModelList-> val barChart = binding.idBarChartMounth barChart.setScaleEnabled(false) // 按月份分组,合并同一月份的奖金数据(这里用累加,可根据需求替换为取最大/平均值等) val groupedSortedData = reportModelList.groupBy { it.oy } .mapValues { group -> group.value.sumOf { it.YigilganBonus } } .toSortedMap() // 按月份排序,保证X轴顺序合理 val entries = ArrayList<BarEntry>() val labels = ArrayList<String>() var index = 0 groupedSortedData.forEach { (month, totalBonus) -> entries.add(BarEntry(totalBonus.toFloat(), index)) labels.add(mounthSalary(month)) index++ } val bardataset = BarDataSet(entries, "Oylik maoshlar miqdori") val data = BarData(labels, bardataset) barChart.data = data barChart.setDescription("🛠 Oylik maosh statistikasi") barChart.animateY(2500) })
关键修复说明
- 数据合并:通过
groupBy按oy(月份)分组,用sumOf合并同一月份的奖金数据,确保每个月份仅对应一条数据 - 同步顺序:基于排序后的分组数据同时生成
BarEntry和标签,保证每个索引对应的条目与标签严格一一对应 - 有序排列:
toSortedMap()确保月份按自然顺序排列,让X轴标签的展示更符合逻辑
内容的提问来源于stack exchange,提问作者Jamshid Muxtaraliev
相关产品推荐
相关产品推荐

