SwiftUI Chart中AxisMarks的Y轴顺序异常问题排查
解决LineMark图表全0数据时Y轴反转问题
当所有数据值为0时,SwiftUI Chart会自动压缩Y轴范围至仅包含0值,导致自定义的AxisMarks出现显示异常(Y轴反转)。仅设置AxisMarks的values数组无法解决该问题,需要强制锁定Y轴的定义域范围。
修改方案
添加.chartYScale(domain: 0...15)修饰符,强制指定Y轴从0到15的固定范围,不受数据内容影响。
修改后的完整代码
Chart { ForEach(manager.data) { LineMark( x: .value("Date", $0.date), y: .value("Count", $0.value) ) .symbol { Circle() .frame(width: 5, height: 5) } } } .chartXAxis { AxisMarks(preset: .aligned , values: manager.last15days) { value in if ((value.index+1) % 3 == 0 || value.index == 0) { let date = manager.last15days[value.index] let stringFormatted = manager.formatter.string(from: date) AxisValueLabel(stringFormatted) .offset(y: 10) } } } .chartYScale(domain: 0...15) // 新增:强制锁定Y轴范围 .chartYAxis { let values = [0, 3, 6, 9, 12, 15] AxisMarks(values: values) { value in AxisValueLabel("\(values[value.index])").offset(x: 15) AxisGridLine() } } .listRowBackground(Color.clear) .foregroundStyle(Color(.blue)) .frame(height: 300) .padding()
说明
.chartYScale(domain:)会强制Chart使用指定的数值范围作为Y轴上下限,无论数据是否全为0,都能保证Y轴从0(底部)到15(顶部)的正常显示。- 保留原有的AxisMarks设置,可继续显示自定义刻度值和网格线,两者配合即可解决反转问题。
内容的提问来源于stack exchange,提问作者mparis
相关产品推荐
相关产品推荐

