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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:14:54