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

