MPAndroidChart分组柱状图不显示全部柱子及标签居中问题
MPAndroidChart分组柱状图问题修复方案
问题1:X轴初始状态无法完整展示所有柱子
修复核心是手动计算X轴的显示范围,配合setFitBars让柱状图自动适配边界,在barChart.groupBars(0f, groupSpace, barSpace);调用后新增4行代码即可:
// 计算单组柱子总宽度 float groupWidth = barWidth * 2 + barSpace * 2 + groupSpace; // 强制设置X轴起始和结束范围 xAxis.setAxisMinimum(0f); xAxis.setAxisMaximum(0f + groupWidth * title_list.length); // 自动适配柱子边界 barChart.setFitBars(true);
问题2:X轴标签与柱子组不居中对齐
修复核心是调整标签取值逻辑,匹配分组后每个柱子组的中心点位置,修改两处代码:
- 给XAxis配置新增粒度和居中属性,避免标签重复错位:
xAxis.setGranularity(1f); xAxis.setCenterAxisLabels(true);
- 重写X轴的ValueFormatter逻辑,匹配分组后的索引:
xAxis.setValueFormatter(new ValueFormatter() { @Override public String getFormattedValue(float value) { int index = (int) (value - 0.5f); if (index >=0 && index < title_list.length) { return title_list[index]; } return ""; } });
修改后完整代码
public void LoadBarChart() { List<BarEntry> barEntries1 = new ArrayList<>(); for (int i = 0; i < title_list.length; i++) { barEntries1.add(new BarEntry(i, title_values_1[i])); } List<BarEntry> barEntries2 = new ArrayList<>(); for (int i = 0; i < title_list.length; i++) { barEntries2.add(new BarEntry(i, title_values_2[i])); } BarDataSet dataSet1 = new BarDataSet(barEntries1, "Dataset 1"); dataSet1.setColors(getColor(R.color.pie_chart_blue)); dataSet1.setValueTextSize(10f); /* values size */ dataSet1.setValueTextColor(Color.WHITE); BarDataSet dataSet2 = new BarDataSet(barEntries2, "Dataset 2"); dataSet2.setColors(getColor(R.color.pie_chart_red)); dataSet2.setValueTextSize(10f); /* values size */ dataSet2.setValueTextColor(Color.WHITE); float groupSpace = 0.06f; float barSpace = 0.02f; // x2 dataset float barWidth = 0.45f; // x2 dataset BarData data = new BarData(dataSet1, dataSet2); ValueFormatter vf = new ValueFormatter() { @Override public String getFormattedValue(float value) { return ""+(int)value; } }; data.setValueFormatter(vf); data.setValueTextSize(12f); data.setBarWidth(barWidth); XAxis xAxis = barChart.getXAxis(); xAxis.setValueFormatter(new ValueFormatter() { @Override public String getFormattedValue(float value) { int index = (int) (value - 0.5f); if (index >=0 && index < title_list.length) { return title_list[index]; } return ""; } }); xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); xAxis.setDrawGridLines(false); xAxis.setDrawAxisLine(false); xAxis.setLabelCount(title_list.length); // 新增配置 xAxis.setGranularity(1f); xAxis.setCenterAxisLabels(true); barChart.setData(data); barChart.groupBars(0f, groupSpace, barSpace); // 新增配置 float groupWidth = barWidth * 2 + barSpace * 2 + groupSpace; xAxis.setAxisMinimum(0f); xAxis.setAxisMaximum(0f + groupWidth * title_list.length); barChart.setFitBars(true); barChart.getDescription().setEnabled(false); barChart.setDrawValueAboveBar(false); barChart.setTouchEnabled(false); barChart.animateY(1000); barChart.invalidate(); }
内容的提问来源于stack exchange,提问作者Saify
相关产品推荐
相关产品推荐

