50 lines
1.3 KiB
Swift
50 lines
1.3 KiB
Swift
import SwiftUI
|
|
import Charts
|
|
|
|
struct ElevationSample: Identifiable {
|
|
|
|
let timestamp: Date
|
|
|
|
let altitude: Double
|
|
|
|
var id: Date {
|
|
timestamp
|
|
}
|
|
}
|
|
|
|
struct ElevationGraph: View {
|
|
|
|
let samples: [ElevationSample]
|
|
|
|
var body: some View {
|
|
Chart {
|
|
// Active segments as area + line
|
|
ForEach(samples) { sample in
|
|
LineMark(
|
|
x: .value("Time", sample.timestamp),
|
|
y: .value("Altitude", sample.altitude)
|
|
)
|
|
.foregroundStyle(by: .value("Series", "Altitude"))
|
|
//.interpolationMethod(.catmullRom)
|
|
|
|
AreaMark(
|
|
x: .value("Time", sample.timestamp),
|
|
y: .value("Altitude", sample.altitude)
|
|
)
|
|
//.interpolationMethod(.catmullRom)
|
|
.foregroundStyle(LinearGradient(
|
|
gradient: Gradient(colors: [.blue.opacity(0.8), .blue.opacity(0.2)]),
|
|
startPoint: .top,
|
|
endPoint: .bottom
|
|
))
|
|
}
|
|
}
|
|
.chartYAxis {
|
|
AxisMarks(position: .leading)
|
|
}
|
|
.chartXScale(domain: samples.first!.timestamp...samples.last!.timestamp)
|
|
.frame(width: 700, height: 220)
|
|
.padding()
|
|
}
|
|
}
|