You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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轴标签与柱子组不居中对齐

修复核心是调整标签取值逻辑,匹配分组后每个柱子组的中心点位置,修改两处代码:

  1. 给XAxis配置新增粒度和居中属性,避免标签重复错位:
xAxis.setGranularity(1f);
xAxis.setCenterAxisLabels(true);
  1. 重写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:54:00