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

MPAndroidChart BarChart能否展示两组不同Y值数据集并分左右Y轴显示?

在MPAndroidChart的BarChart中实现双Y轴(距离+百分比)展示不同数据集

当然可以实现!我之前在项目里做过类似的需求,MPAndroidChart对双Y轴的支持其实很完善,只是很多人没注意到这个功能。下面我给你一步步拆解实现方法,附代码示例:

1. 配置左右两个Y轴

首先我们需要分别配置左侧(距离)和右侧(百分比)的Y轴,开启右侧Y轴(默认是关闭的),并设置各自的显示样式:

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

// 配置左侧Y轴:用于显示距离
YAxis leftAxis = barChart.getAxisLeft();
leftAxis.setAxisMinimum(0f); // 设置最小刻度
leftAxis.setLabelCount(5, true); // 设置标签数量,true表示强制显示指定数量
leftAxis.setAxisTitle("距离(米)");
leftAxis.setTextColor(Color.parseColor("#2196F3")); // 设置轴文本颜色
leftAxis.setDrawGridLines(true); // 显示网格线

// 配置右侧Y轴:用于显示百分比
YAxis rightAxis = barChart.getAxisRight();
rightAxis.setEnabled(true); // 必须开启,默认是关闭的
rightAxis.setAxisMinimum(0f);
rightAxis.setAxisMaximum(100f); // 百分比最大100%
rightAxis.setLabelCount(5, true);
rightAxis.setAxisTitle("百分比(%)");
rightAxis.setTextColor(Color.parseColor("#F44336"));
rightAxis.setDrawGridLines(false); // 关闭网格线,避免和左侧混淆

2. 创建两个数据集并绑定到对应Y轴

接下来我们要创建两个独立的BarDataSet,分别绑定到左侧和右侧Y轴,确保它们的X轴位置一一对应:

// 构建距离数据集
List<BarEntry> distanceEntries = new ArrayList<>();
distanceEntries.add(new BarEntry(0, 45)); // X=0,距离45米
distanceEntries.add(new BarEntry(1, 62)); // X=1,距离62米
distanceEntries.add(new BarEntry(2, 58)); // X=2,距离58米
BarDataSet distanceDataSet = new BarDataSet(distanceEntries, "实际距离");
distanceDataSet.setAxisDependency(AxisDependency.LEFT); // 绑定到左侧Y轴
distanceDataSet.setColor(Color.parseColor("#2196F3")); // 柱子颜色和轴对应

// 构建百分比数据集
List<BarEntry> percentageEntries = new ArrayList<>();
percentageEntries.add(new BarEntry(0, 32)); // X=0,完成率32%
percentageEntries.add(new BarEntry(1, 78)); // X=1,完成率78%
percentageEntries.add(new BarEntry(2, 55)); // X=2,完成率55%
BarDataSet percentageDataSet = new BarDataSet(percentageEntries, "完成率");
percentageDataSet.setAxisDependency(AxisDependency.RIGHT); // 绑定到右侧Y轴
percentageDataSet.setColor(Color.parseColor("#F44336"));

3. 组合数据集并配置图表显示

最后把两个数据集组合成BarData,设置到图表中,还可以配置分组显示让两组柱子并排:

// 组合数据集
List<IBarDataSet> dataSets = new ArrayList<>();
dataSets.add(distanceDataSet);
dataSets.add(percentageDataSet);
BarData barData = new BarData(dataSets);

// 配置分组显示(让两组柱子并排)
float barWidth = 0.35f; // 单个柱子的宽度
barData.setBarWidth(barWidth);
barChart.getXAxis().setAxisMinimum(0f);
barChart.getXAxis().setAxisMaximum(3f); // 对应3个数据点
barChart.groupBars(0f, 0.1f, barWidth); // 参数:起始偏移、组间距、柱子宽度

// 其他显示配置
barChart.setData(barData);
barChart.getLegend().setEnabled(true); // 显示图例区分两组数据
barChart.setFitBars(true); // 自动调整X轴范围适配柱子
barChart.animateY(1000); // 添加动画效果
barChart.invalidate(); // 刷新图表

一些注意事项

  • 确保两个数据集的X轴索引完全对应,这样柱子才能准确对齐
  • 如果不需要分组并排,而是希望柱子叠加显示,只需要去掉groupBars方法,调整barWidth为合适的值即可
  • 可以根据需求自定义轴的刻度、颜色、网格线等样式,提升图表的可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:32:37