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

求助:MPAndroidChart中BarDataSet设置及柱状内容垂直显示问题

解决MPAndroidChart BarChart的两个问题:BarDataSet设置与垂直显示

嘿,我来帮你搞定这两个问题!先逐个拆解分析:

1. BarDataSet设置问题

你的代码里创建BarDataSet的核心逻辑是对的,但有几个细节没处理好,可能导致数据不显示或者异常:

  • 确保数据长度匹配:nameDate和fl的长度必须完全一致,不然X轴标签会出现数组越界或者数据不匹配的情况
  • 添加标签数量配置:给X轴明确设置标签数量,确保所有自定义标签都能正常显示
  • 空数据防护:提前判断数据是否为空,避免创建空的BarDataSet导致图表无内容

2. 柱状内容(X轴标签)垂直显示

你说的“柱状内容垂直显示”应该是指X轴的文字标签竖排显示吧?只需要给XAxis添加文字旋转角度的配置就能实现。

修改后的完整代码

public void LoadChart(final ArrayList<String> nameDate, ArrayList<Float> fl){
    // 空数据与长度匹配校验,避免空指针和越界异常
    if(fl == null || fl.isEmpty() || nameDate == null || nameDate.size() != fl.size()){
        return;
    }

    com.github.mikephil.charting.charts.BarChart chart = (com.github.mikephil.charting.charts.BarChart) findViewById(R.id.barchart);
    List<BarEntry> entries = new ArrayList<>();
    for(int i=0;i<fl.size();i++) {
        entries.add(new BarEntry(i, fl.get(i)));
    }

    // 创建并配置BarDataSet
    BarDataSet set = new BarDataSet(entries, "BarDataSet");
    set.setColor(Color.rgb(103,203,27));
    
    BarData data = new BarData(set);
    data.setBarWidth(0.9f); // 设置自定义柱子宽度
    chart.setData(data);
    chart.setFitBars(true); // 让X轴完全适配所有柱子
    chart.animateXY(2000, 2000);
    chart.setScaleEnabled(false);
    chart.invalidate(); // 刷新图表

    // 隐藏默认描述文字
    Description description = chart.getDescription();
    description.setEnabled(false);

    // 配置X轴
    XAxis xAxis = chart.getXAxis();
    xAxis.setDrawGridLines(false);
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
    xAxis.setGranularity(1f);
    // 确保所有X轴标签都能显示
    xAxis.setLabelCount(nameDate.size());
    // ********** 新增:设置标签垂直旋转90度 **********
    xAxis.setLabelRotationAngle(90f);
    xAxis.setValueFormatter(new IAxisValueFormatter() {
        @Override
        public String getFormattedValue(float value, AxisBase axis) {
            // 边界判断,防止数组越界
            if((int)value >=0 && (int)value < nameDate.size()){
                return nameDate.get((int) value);
            }
            return "";
        }
    });

    // 配置Y轴
    YAxis yLabels = chart.getAxisLeft();
    yLabels.setDrawGridLines(false);
    YAxis yLabels1 = chart.getAxisRight();
    yLabels1.setEnabled(false);
}

关键修改点说明

  • 新增空数据与长度匹配校验,避免空指针和数组越界异常
  • 给XAxis添加xAxis.setLabelCount(nameDate.size()),确保所有自定义标签都能正常渲染
  • 新增xAxis.setLabelRotationAngle(90f)实现X轴标签的垂直显示效果
  • 在ValueFormatter中添加边界判断,进一步防止数据不匹配导致的崩溃

如果你的“柱状内容垂直显示”是指把横向柱状图改成垂直样式(默认BarChart就是垂直的,HorizontalBarChart是横向),那只需要确保布局文件里的控件是BarChart而非HorizontalBarChart即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:46:20