使用数组和Swift Charts框架创建一个SwiftUI折线图

3
在SwiftUI应用程序中,我试图将一组Y值传递给Swift Charts框架以绘制折线图。我想根据Y数据的长度或计数创建X值。我尝试了下面展示的方法,但它不起作用,因为Charts希望数据是一个结构体数组。有没有办法直接将数组传递给Charts框架?
import SwiftUI
import Charts

struct ContentView: View {
    
    let ydata = [1, 4.5, 3, 6, 7, 5.2, 9, 12.5]
    let xdata = Array(0..<ydata.count)
    let data = [xdata, ydata]

    var body: some View {
        Chart(data) {
            LineMark(
                x: .value("X values", $0),
                y: .value("Y values", $1)
            )
        }
    }
}
2个回答

3
你可以使用元组数组,这里我使用计算属性来处理数据。
var data: [(Int, Double)] {
    Array(zip(Array(0..<ydata.count), ydata))
}

当使用元组时,我们需要告诉 Chart 其 id 是什么,因此 data 的使用略有不同。
var body: some View {
    Chart(data, id: \.0) { tuple in
        LineMark(
            x: .value("X values", tuple.0),
            y: .value("Y values", tuple.1)
        )
    }
}

可以的。谢谢你的帮助。你也可以使用 $0$1 来表示 x 和 y 的值。 - wigging

2

这可能会有所帮助

import SwiftUI
import Charts

struct ContentView: View {
    
    let ydata = [1, 4.5, 3, 6, 7, 5.2, 9, 12.5]

    var body: some View {
        Chart(0..<ydata.count, id: \.self)
        { nr in
            LineMark(
                x: .value("X values", nr),
                y: .value("Y values", ydata[nr])
            )
        }
    }
}

nr 代表什么? - wigging
它正在计算数组元素。 - Eero
这种方法比其他答案更清晰。谢谢你发布这个。 - wigging

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接