Chart图表X轴存在重复值时未按数据集实际数据正常绘制的问题
解决方案
问题根源是两个数据集使用了完全相同的X坐标值,Charts库默认会将相同X值的数据点渲染在同一横轴位置,你之前调整的仅为X轴标签的显示逻辑,没有修改数据本身的X坐标排布,因此不生效。可以按照以下步骤修复:
步骤1:对两个数据集的X值做偏移处理
给不同数据集的X值增加固定的小数偏移,让相同逻辑X值的点在横轴上左右错开,保留整数部分作为标签匹配的依据:
// 处理dataset1,X值统一减0.2 for i in 0..<dataset1.entryCount { let entry = dataset1.entryForIndex(i) entry?.x = Double(i) - 0.2 } // 处理dataset2,X值统一加0.2 for i in 0..<dataset2.entryCount { let entry = dataset2.entryForIndex(i) entry?.x = Double(i) + 0.2 }
偏移量可以根据你想要的间距自行调整,只要保证两个数据集的偏移量一正一负,且总和不超过1即可。
步骤2:简化X轴格式化器逻辑
直接取X值的整数部分匹配标签索引,不需要按轴最大长度计算比例:
class CustomLabelsAxisValueFormatter : NSObject, IAxisValueFormatter { var labels: [String] = [] func stringForValue(_ value: Double, axis: AxisBase?) -> String { let index = Int(value.rounded()) guard index >= 0, index < labels.count else { return "" } return labels[index] } } // 初始化格式化器 let formatter = CustomLabelsAxisValueFormatter() formatter.labels = arrStrDates // 你的X轴标签数组 lineView.xAxis.valueFormatter = formatter
步骤3:调整X轴基础配置
lineView.xAxis.granularityEnabled = true lineView.xAxis.granularity = 1.0 // 额外补充配置,避免X轴两端留白异常 lineView.xAxis.axisMinimum = -0.5 lineView.xAxis.axisMaximum = Double(arrStrDates.count) - 0.5
步骤4:重新加载数据
处理完数据集后重新赋值给图表即可生效:
let data = LineChartData() data.dataSets.append(dataset1) data.dataSets.append(dataset2) chartView.data = data chartView.notifyDataSetChanged()
内容的提问来源于stack exchange,提问作者Jinesh Patel
相关产品推荐
相关产品推荐

