LineMark 图表在 Swift 图表中显示缺失值的零值

问题描述 投票:0回答:1

与由

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()
}

生成的 LineMark 图表: 求LineMark图表:

我怎样才能实现这样的行为?不要期望实体(数字、分钟、小时、天...)或跨度(1...10、1 天、3 个月...)始终相同。

是否有任何修改器,或者是否以某种方式手动添加这些点?

swift swiftui charts
1个回答
0
投票

您确实需要显式生成零标记,因为 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)
        
}
© www.soinside.com 2019 - 2024. All rights reserved.