使用Charts库绘制折线图缩放时X轴出现重复值如何解决?
问题原因
- X轴刻度格式化逻辑与粒度配置不匹配:你设置的
granularity = 1仅约束了相邻刻度的原始数值差不小于1,但缩放后Charts会自动生成浮点型刻度(如1.0、1.5、2.0),如果格式化器仅保留整数部分,1.0和1.5会被统一格式化为1,出现显示重复。 - 未显式限制X轴标签数量:Charts在缩放场景下自动计算标签数量时会生成过多标签,进一步加剧重复问题。
解决方案
按以下步骤修改配置即可解决:
- 自定义X轴格式化器,仅为整数刻度返回有效标签,避免浮点刻度被格式化为重复的整数值:
class IntegerXAxisFormatter: IAxisValueFormatter { func stringForValue(_ value: Double, axis: AxisBase?) -> String { guard value.truncatingRemainder(dividingBy: 1) == 0 else { return "" } return "\(Int(value))" } } // 绑定格式化器到X轴 self.lineChartView.xAxis.valueFormatter = IntegerXAxisFormatter()
- 补充X轴基础配置,确保粒度限制完全生效:
// 显式设置X轴最大标签数,可根据界面宽度调整为5-10 self.lineChartView.xAxis.labelCount = 8 self.lineChartView.xAxis.granularityEnabled = true self.lineChartView.xAxis.granularity = 1 // 若X轴为数据下标,可添加上下偏移避免首尾标签被裁切 self.lineChartView.xAxis.axisMinimum = -0.5 self.lineChartView.xAxis.axisMaximum = Double(dataPoints.count) - 0.5 // 关闭强制标签、开启首尾防裁切 self.lineChartView.xAxis.forceLabelsEnabled = false self.lineChartView.xAxis.avoidFirstLastClippingEnabled = true
问题相关截图
- 缩放前正常效果:

- 缩放后异常效果:

内容的提问来源于stack exchange,提问作者Manish Kumar
相关产品推荐
相关产品推荐

