MPAndroidChart柱状图X轴与条形不对齐及横向滚动实现问题
解决BarChart X轴标签与条形对齐及左右滚动问题
一、X轴标签与条形对齐
你的代码中X轴标签和条形错位,核心是未配置X轴标签居中规则,且未匹配条形宽度调整刻度范围。需添加以下设置:
- 开启X轴标签居中对齐:
chart.xAxis.setCenterAxisLabels(true) - 设置X轴刻度间隔为1(对应每个条形的索引位置):
chart.xAxis.granularity = 1f - 调整X轴起始/结束范围,让条形完全贴合刻度:
chart.xAxis.axisMinimum = -barData.barWidth / 2 chart.xAxis.axisMaximum = labels.size - barData.barWidth / 2
二、开启左右滚动功能
默认BarChart未启用拖拽滚动,需手动开启:
- 开启横向拖拽:
chart.setDragEnabled(true) - 可选:关闭不需要的缩放功能(仅保留滚动):
chart.setScaleEnabled(false),或仅允许X轴缩放:chart.setScaleYEnabled(false) - 防止首尾标签被裁剪:
chart.xAxis.setAvoidFirstLastClipping(true)
修改后的完整代码
val sortedMap: MutableMap<String, Int> = TreeMap(value2) val chart = findViewById<BarChart>(R.id.barChart) chart.setDrawBarShadow(false) chart.setDrawValueAboveBar(true) chart.description.isEnabled = false chart.setPinchZoom(false) chart.setDrawGridBackground(false) // 开启拖拽滚动 chart.setDragEnabled(true) chart.setScaleEnabled(false) // 关闭整体缩放,只保留滚动 chart.setScaleYEnabled(false) // 禁止Y轴缩放,可选 val labels = ArrayList<String>() for ((keys, _) in sortedMap.entries) { labels.add(keys) } val list2 = ArrayList<BarEntry>() var i = 0 for ((_, values) in sortedMap.entries) { list2.add(BarEntry(i.toFloat(), values.toFloat())) i++ } val dataset = BarDataSet(list2, "Legend") dataset.colors = ColorTemplate.MATERIAL_COLORS.toList() val barData = BarData(dataset) barData.barWidth = 0.4f chart.data = barData // X轴对齐配置 chart.xAxis.valueFormatter = IndexAxisValueFormatter(labels) chart.xAxis.position = XAxis.XAxisPosition.BOTTOM chart.xAxis.setCenterAxisLabels(true) chart.xAxis.granularity = 1f chart.xAxis.axisMinimum = -barData.barWidth / 2 chart.xAxis.axisMaximum = labels.size - barData.barWidth / 2 chart.xAxis.setAvoidFirstLastClipping(true) chart.axisLeft.axisMinimum = 0f chart.axisRight.axisMinimum = 0f chart.axisRight.setDrawLabels(false) chart.legend.isEnabled = false chart.animateY(500) chart.invalidate()
内容的提问来源于stack exchange,提问作者Ajay Satpati
相关产品推荐
相关产品推荐

