鉴于这是一个心率图表,我试图使图表的Y最大刻度为210(bpm),例如.chartYScale(domain: 0 ... 210)
,但它似乎只有在我传入200或300时才能正确缩放,任何介于两者之间的内容都不起作用。这是有意的还是一个错误?
import SwiftUI
import Charts
import HealthKit
struct TestYAxisRangeChart: View {
let heartRateData = [80.0, 90.0, 120.0, 150.0, 160.0, 140.0, 125.0, 110.0, 88.0]
var body: some View {
Chart {
ForEach(heartRateData, id: \.self) { sample in
LineMark(
x: .value("", heartRateData.firstIndex(of: sample)!),
y: .value("HR", sample))
.foregroundStyle(Color.red)
}
}
.chartYAxis{
AxisMarks(position: .leading)
}
.frame(height: 300)
.padding(.horizontal)
.chartYScale(domain: 0 ... 210)
}
}
struct TestYAxisRangeChart_Previews: PreviewProvider {
static var previews: some View {
TestYAxisRangeChart()
}
}
3条答案
按热度按时间ar5n3qh51#
也许你只需要这个(Xcode 14 b4/ iOS 16):
Test module on GitHub
az31mfrm2#
使用范围而不是域,plotDimension将自动使用数据范围,IIRC:
ltskdhd13#
如果您只想使比例不以0开始,则可以向
chartYScale
传递不包括0的自动属性域(例如.chartYScale(domain: .automatic(includesZero: false))
),但根据您的数据和计算的y跨距,0可能仍然可见。要在不设置显式域或值的情况下包括210,您可以始终在210处绘制一个不可见的点标记。但这会导致一个四舍五入的最大y轴值(例如250-300取决于你的数据)。2使最大值正好为210的唯一方法是通过其他人建议的值或域来完全控制轴。