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

MPAndroidChart BarChart单条X轴数据时标签重复显示如何解决

问题原因

MPAndroidChart 的 X 轴 setLabelCount 方法第二个参数传入 false 时,不会严格遵循你设置的标签数量,系统会自动调整标签分布。当仅存在 1 条数据时,X 轴默认会渲染首尾两个位置的标签,两个标签都会匹配到你仅有的 1 个日期文本,就出现了重复显示的问题。

修复方案

  1. 先修正代码中的拼写错误:循环条件中的 respones 为笔误,需改为 response
  2. 对单数据场景做特殊适配:
  • 单数据时给 setLabelCount 第二个参数传 true,强制严格显示 1 个标签
  • 手动设置 X 轴的上下限,缩小X轴显示区间,仅保留单个标签的展示位置
  • 多数据场景保持原有逻辑不变

修改后完整代码

private void showBarGraph(List<Object> response) {
    barChart.setNoDataText(getResources().getString(R.string.sorry_data_not_available));
    barChart.clear();
    if(response.size()>0) {
        int highestValue = response != null && response.size() > 0 ? response.size() : 0;
        barChart.getAxisLeft().setAxisMaximum(highestValue);
        barChart.getAxisLeft().setAxisMinimum(0);
        barChart.animateY(1000);
        List<BarEntry> entries = new ArrayList<>();
        List<String> xAxisValues = new ArrayList<>();
        if (response != null) {
            // 修正拼写错误:respones改为response
            for (int i = 0; i < response.size(); i++) {
                entries.add(new BarEntry(i, response.get(i).getCount(), ContextCompat.getColor(getActivity(), R.color.graph)));
                xAxisValues.add(response.get(i).getTimekey());
            }
            barChart.getAxisLeft().setLabelCount(highestValue > 10 ? 10 : highestValue, false);
            // 修改X轴标签计数逻辑,单数据时强制严格匹配标签数量
            int xLabelCount = response.size() <= 12 ? response.size() : 12;
            boolean forceXLabelCount = response.size() == 1;
            barChart.getXAxis().setLabelCount(xLabelCount, forceXLabelCount);
            // 单数据时手动设置X轴上下限
            if (response.size() == 1) {
                barChart.getXAxis().setAxisMinimum(-0.5f);
                barChart.getXAxis().setAxisMaximum(0.5f);
            }
            if (response.size() >= 4) {
                barChart.getXAxis().setLabelRotationAngle(-45);
            } else {
                barChart.getXAxis().setLabelRotationAngle(0);
            }
        }

        IndexAxisValueFormatter xAxisValueFormatter = new IndexAxisValueFormatter(xAxisValues);
        barChart.getXAxis().setValueFormatter(xAxisValueFormatter);
        BarXYMarkerView xymv = new BarXYMarkerView(getActivity(), xAxisValueFormatter);
        // Set the marker to the chart
        xymv.setChartView(barChart);
        barChart.setMarker(xymv);
        BarDataSet set = new BarDataSet(entries, null);
        set.setDrawValues(false);
        List<Integer> graphColors = new ArrayList<>();
        graphColors.add(ContextCompat.getColor(getActivity(), R.color.graph));
        set.setColors(graphColors);
        BarData data = new BarData(set);
        barChart.setData(data);
        barChart.invalidate();
    }
}

修改后单数据场景只会显示1次日期标签,多数据场景原有逻辑不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:06:01