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

如何使HorizontalBarChart图表上的数值显示为整数?

解决MPAndroidChart柱状图数值显示为整数的问题

你提到的坐标轴ValueFormatter确实只负责坐标轴刻度的显示,而柱子上方的数值是由**数据集(DataSet)**的setValueFormatter来控制的,这是两个独立的配置项。下面给你具体的实现步骤:


1. 创建自定义的整数数值格式化器

先写一个继承自ValueFormatter的类,重写getBarLabel方法,把浮点型的数值转换成整数格式:

public class IntegerValueFormatter extends ValueFormatter {
    @Override
    public String getBarLabel(BarEntry barEntry) {
        // 把浮点值转成整数,可根据需求用(int)强转或Math.round()取整
        int value = (int) barEntry.getY();
        return String.valueOf(value);
    }
}

2. 将格式化器绑定到你的BarDataSet

在创建BarDataSet的代码中,设置这个自定义格式化器,同时记得开启数值显示(默认可能是关闭状态):

// 基于你已有的yValues集合创建数据集
BarDataSet barDataSet = new BarDataSet(yValues, "超市数据");
// 绑定柱子数值的格式化器
barDataSet.setValueFormatter(new IntegerValueFormatter());
// 开启柱子上方的数值显示(必须开启才会渲染数值)
barDataSet.setDrawValues(true);

3. 整合到现有代码的完整示例

把上述逻辑插入到你的原有代码中,完整的实现大概是这样:

HorizontalBarChart barChart = findViewById(R.id.bar_chart);
ArrayList<BarEntry> yValues = new ArrayList<>();
SharedPreferences appData = getSharedPreferences("app_data", Context.MODE_PRIVATE);

// 补全你从SharedPreferences读取数据的逻辑
Map<String, ?> allEntries = appData.getAll();
int index = 0;
for (Map.Entry<String, ?> entry : allEntries.entrySet()) {
    float value = Float.parseFloat(entry.getValue().toString());
    yValues.add(new BarEntry(index, value));
    index++;
}

// 配置数据集
BarDataSet barDataSet = new BarDataSet(yValues, "超市数据");
barDataSet.setValueFormatter(new IntegerValueFormatter());
barDataSet.setDrawValues(true);

// 配置图表数据并刷新
BarData barData = new BarData(barDataSet);
barChart.setData(barData);
// 其他图表样式配置(如坐标轴、动画等)
barChart.invalidate(); // 刷新图表使其生效

额外提示

  • 如果需要对小数进行四舍五入取整,可把getBarLabel里的代码改成int value = Math.round(barEntry.getY());
  • 还能通过barDataSet.setValueTextSize()、barDataSet.setValueTextColor()调整数值的大小和颜色,优化显示效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:10:22