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

如何使用MPAndroidChart绘制带间隔的柱状图并实现指定图表功能

使用MPAndroidChart绘制带间隔且Y轴非0起始的柱状图

核心实现步骤


1. 布局中添加BarChart

在XML布局文件中引入柱状图控件:

<com.github.mikephil.charting.charts.BarChart
    android:id="@+id/barChart"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

2. 准备数据并配置数据集

创建数据条目,定义柱子样式:

// 获取图表实例
BarChart barChart = findViewById(R.id.barChart);

// 构造数据条目
List<BarEntry> entries = new ArrayList<>();
entries.add(new BarEntry(0f, 30f));
entries.add(new BarEntry(1f, 45f));
entries.add(new BarEntry(2f, 28f));
entries.add(new BarEntry(3f, 55f));
entries.add(new BarEntry(4f, 38f));

// 创建数据集并设置样式
BarDataSet dataSet = new BarDataSet(entries, "业务数据");
dataSet.setColor(Color.parseColor("#FF6200EE")); // 柱子颜色
dataSet.setValueTextSize(12f); // 数值文本大小
dataSet.setValueTextColor(Color.BLACK); // 数值文本颜色

3. 设置柱子间隔

通过BarData.setBarWidth()控制柱子宽度,间接实现柱子间的间隔(值越小,间隔越大,范围0-1):

BarData barData = new BarData(dataSet);
barData.setBarWidth(0.6f); // 柱子占X轴刻度宽度的60%,剩余40%为间隔
barChart.setData(barData);

4. 配置Y轴(取消从0起始)

默认Y轴从0开始,通过手动设置最小值实现非0起始,同时添加偏移量保证显示美观:

YAxis leftAxis = barChart.getAxisLeft();
// 获取数据中的最小值,减去偏移量作为Y轴起始值
float minValue = Collections.min(entries, Comparator.comparing(BarEntry::getY)).getY();
leftAxis.setAxisMinimum(minValue - 5f);
// 设置Y轴最大值,添加偏移量避免柱子顶部贴边界
float maxValue = Collections.max(entries, Comparator.comparing(BarEntry::getY)).getY();
leftAxis.setAxisMaximum(maxValue + 5f);

// 隐藏右侧Y轴
barChart.getAxisRight().setEnabled(false);

5. 优化X轴与图表显示

XAxis xAxis = barChart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); // X轴显示在底部
xAxis.setDrawGridLines(false); // 隐藏X轴网格线
// 自定义X轴标签
xAxis.setValueFormatter(new ValueFormatter() {
    @Override
    public String getFormattedValue(float value) {
        return "类别" + (int) value + 1;
    }
});

// 隐藏描述文本,启用柱子适配屏幕
barChart.getDescription().setEnabled(false);
barChart.setFitBars(true);
// 添加Y轴动画
barChart.animateY(1000);

// 刷新图表
barChart.invalidate();

分组柱状图间隔设置(可选)

如果需要实现多组柱子的间隔,可使用groupBars()方法:

// 假设有两组数据集
BarDataSet set1 = new BarDataSet(groupEntries1, "组1");
BarDataSet set2 = new BarDataSet(groupEntries2, "组2");

BarData barData = new BarData(set1, set2);
barData.setBarWidth(0.35f); // 单根柱子宽度
// 参数:组起始位置、组内柱子间隔、组间间隔
barData.groupBars(0f, 0.1f, 0f);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:25:24