Android MPChart分组柱状图X轴标签全显且与分组对齐实现问题
MPAndroidChart分组柱状图标签不显示、不对齐问题修复方案
代码存在的核心问题
- BarEntry的X坐标赋值错误
两个数据系列的BarEntry均使用了重复的X值(1、2、3、4、1、2),6组数据对应X轴索引应为0~5,每个数据集需要各添加6个X值为0、1、2、3、4、5的BarEntry,重复X值会导致数据堆叠、分组逻辑混乱。 - X轴标签数配置错误
代码中设置了xAxis.setLabelCount(5),但实际有6个自定义标签,无法完全展示,需要改为强制显示6个标签。 - X轴配置冲突
提前设置的xAxis.setAxisMaximum(6)会被后续分组计算的最大轴值覆盖,属于冗余代码;开启xAxis.setAvoidFirstLastClipping(true)会导致首尾标签偏移,影响对齐效果。
修复后完整代码
private void displayGraph(){ barChart.setDrawBarShadow(false); barChart.setDrawValueAboveBar(true); barChart.setMaxVisibleValueCount(50); barChart.setPinchZoom(false); barChart.setDrawGridBackground(false); barChart.getDescription().setEnabled(false); Legend l = barChart.getLegend(); l.setEnabled(false); ArrayList<BarEntry> barEntries = new ArrayList<>(); ArrayList<BarEntry> barEntries1 = new ArrayList<>(); // 修复:X值对应0~5的6组索引,每个X值唯一 barEntries.add(new BarEntry(0,50f)); barEntries.add(new BarEntry(1,42f)); barEntries.add(new BarEntry(2,34f)); barEntries.add(new BarEntry(3,24f)); barEntries.add(new BarEntry(4,50f)); barEntries.add(new BarEntry(5,42f)); barEntries1.add(new BarEntry(0,17f)); barEntries1.add(new BarEntry(1,19f)); barEntries1.add(new BarEntry(2,19f)); barEntries1.add(new BarEntry(3,18f)); barEntries1.add(new BarEntry(4,17f)); barEntries1.add(new BarEntry(5,19f)); BarDataSet barDataSet = new BarDataSet(barEntries,""); barDataSet.setColor(Color.parseColor("#F44336")); barDataSet.setDrawValues(false); BarDataSet barDataSet1 = new BarDataSet(barEntries1,""); barDataSet1.setColors(Color.parseColor("#9C27B0")); barDataSet1.setDrawValues(false); String[] months = new String[] {"TYPE 1", "TYPE 2", "TYPE 3", "TYPE 4","TYPE 5","TYPE 6"}; BarData data = new BarData(barDataSet,barDataSet1); barChart.setData(data); XAxis xAxis = barChart.getXAxis(); xAxis.setValueFormatter(new IndexAxisValueFormatter(months)); barChart.getAxisLeft().setAxisMinimum(0); xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); xAxis.setGranularity(1); xAxis.setGranularityEnabled(true); // 修复:强制显示6个标签 xAxis.setLabelCount(6, true); xAxis.setDrawGridLines(false); float barSpace = 0.02f; float groupSpace = 0.3f; int groupCount = 6; data.setBarWidth(0.15f); xAxis.setAxisMinimum(0); // 按分组宽度自动计算X轴最大值 xAxis.setAxisMaximum(0 + barChart.getBarData().getGroupWidth(groupSpace, barSpace) * groupCount); barChart.groupBars(0, groupSpace, barSpace); // 刷新图表 barChart.invalidate(); }
内容的提问来源于stack exchange,提问作者MARSH
相关产品推荐
相关产品推荐

