与由
BarMark
组成的图表类似,如果某个点没有值,我希望我的 LineMark
图表降至零,而不是简单地连接现有值。
示例:
import Charts
import SwiftUI
struct ChartExample: View {
let data: [(x: Int, y: Int)] = [(0, 1), (1, 3), (5, 1), (10, 1)]
var body: some View {
Chart {
ForEach(data, id: \.x) { point in
LineMark(x: .value("x", point.x), y: .value("y", point.y))
}
}.padding()
}
}
#Preview {
ChartExample()
}
我怎样才能实现这样的行为?不要期望实体(数字、分钟、小时、天...)或跨度(1...10、1 天、3 个月...)始终相同。
是否有任何修改器,或者是否以某种方式手动添加这些点?
您确实需要显式生成零标记,因为 SwiftUI 图表不知道哪个 X 值数据丢失。
填充缺失值的代码可能如下所示:
let data: [(x: Int, y: Int)] = [(0, 1), (1, 3), (5, 1), (10, 1)]
let filledData: [(x: Int, y: Int)] = data.reduce(into: []) { out, point in
if let last = out.last {
var xToFill = last.x+1
while xToFill < point.x {
out.append((xToFill, 0))
xToFill += 1
}
}
out.append(point)
}