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

MPAndroidChart柱状图Y轴数值较大但柱子高度过小问题求助

解决MPAndroidChart柱状图柱子过矮的问题

看起来你遇到的问题是明明Y轴数值都是80+的整数,但绘制出的柱状图柱子却特别矮,结合你的代码来看,我发现几个关键的问题点:


问题根源分析

你的代码里把左右两个Y轴都完全禁用了:

leftAxis.setEnabled(false);
rightAxis.setEnabled(false);

MPAndroidChart在Y轴被全部禁用的情况下,自动计算图表高度范围的逻辑会出现偏差,导致柱子的高度无法按照实际数据比例渲染。另外,即使数据值是81、97这类数值,默认情况下图表会把Y轴最小值设为0,若图表容器高度本身不大,再加上Y轴范围计算异常,就会出现柱子“非常小”的情况。


解决方案

方案1:启用Y轴并手动设置合理范围

你可以启用其中一个Y轴(比如左Y轴),并根据你的数据区间手动设置Y轴的最小/最大值,确保柱子高度匹配数据比例:

YAxis leftAxis = mChart.getAxisLeft();
leftAxis.setEnabled(true); // 启用左Y轴
leftAxis.setAxisMinimum(70f); // 根据你的数据设置最小值,比如70
leftAxis.setAxisMaximum(100f); // 设置最大值,覆盖你的数据最大值97
leftAxis.setDrawGridLines(false); // 若不需要网格线可保留此设置

右Y轴可以保持禁用状态,不影响核心渲染逻辑。

方案2:让图表自动适配数据范围

如果你不想手动设置范围,只需要启用任意一个Y轴,MPAndroidChart会自动根据数据的最小和最大值调整Y轴范围,柱子高度就能正常显示:

YAxis leftAxis = mChart.getAxisLeft();
leftAxis.setEnabled(true);
leftAxis.setDrawGridLines(false);

方案3:检查图表容器的布局高度

确保你的BarChart所在布局有足够的高度,避免使用wrap_content,可以设置固定高度或者match_parent,否则即使数据正确,容器过窄也会让柱子看起来很矮。


调整后的完整配置方法示例

private void setBarChart(BarChart mChart, DashboardMCOP mcop, DashboardMCOM mcom) {
    mChart.setOnChartValueSelectedListener(this);
    mChart.setDrawBarShadow(false);
    mChart.setDrawValueAboveBar(true);
    mChart.getDescription().setEnabled(false);
    mChart.setMaxVisibleValueCount(100);
    mChart.setPinchZoom(false);
    mChart.setDrawGridBackground(false);
    
    IAxisValueFormatter xAxisFormatter = new DayAxisValueFormatter(mChart, context);
    XAxis xAxis = mChart.getXAxis();
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
    xAxis.setDrawGridLines(false);
    xAxis.setGranularity(1f);
    xAxis.setLabelCount(7);
    xAxis.setValueFormatter(xAxisFormatter);
    
    // 启用左Y轴并设置适配数据的范围
    YAxis leftAxis = mChart.getAxisLeft();
    leftAxis.setEnabled(true);
    leftAxis.setAxisMinimum(70f);
    leftAxis.setAxisMaximum(100f);
    leftAxis.setDrawGridLines(false);
    
    YAxis rightAxis = mChart.getAxisRight();
    rightAxis.setEnabled(false);
    
    Legend l = mChart.getLegend();
    l.setEnabled(false);
    
    XYMarkerView mv = new XYMarkerView(context, xAxisFormatter);
    mv.setChartView(mChart);
    mChart.setMarker(mv);
    
    mChart.animateY(1400, Easing.EasingOption.EaseInOutQuad);
    setDataBar(mChart, mcop, mcom);
}

调整后柱子的高度应该会和你的数据值匹配,不会再出现“非常小”的情况。如果还有问题,可以检查mcom.getTreat()和mcom.getContract()返回的数值是否确实是你预期的81、97等,确保数据没有被错误赋值。

内容的提问来源于stack exchange,提问作者stanly

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:56:08