如何使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
相关产品推荐
相关产品推荐

