Swift Chart:自定义由日期组成的X轴

vom*_*omi 2 charts swift swiftui

这个问题听起来可能很傻,但我花了很多时间尝试却没有弄清楚。

我的数据代表一段时间内的车辆速度,粒度约为秒。因此有很多数据。我想自定义 X 轴(时间),使其仅显示每分钟的标签,或者更好的是每 30 秒显示标签。

这是到目前为止我的代码(正确显示图表,但 X 轴无法工作/显示):

Chart {
    ForEach(orderedLocations) { item in
        LineMark(x: .value("Date", "\(item.timestamp!)"),
                 y: .value("Speed", item.groundSpeed),
                 series: .value("Ground Speed", "A"))
        .interpolationMethod(.catmullRom)
        .foregroundStyle(.blue)
        AreaMark(x: .value("Date", "\(item.timestamp!)"),
                 y: .value("Speed", item.groundSpeed),
                 series: .value("Speed", "A"))
    }
}
.chartXAxis {
    AxisMarks(values: .automatic(minimumStride: 60)) { date in
        AxisValueLabel(format: .dateTime.minute())
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码有什么问题?

Jon*_*ang 5

这是因为 x 值必须是类型Date并且不能插入 a 中String

LineMark(x: .value("Date", item.date),
         y: .value("Speed", item.groundSpeed),
         series: .value("Ground Speed", "A"))
Run Code Online (Sandbox Code Playgroud)

所以你必须将你的时间戳转换为Date第一个。

因为AxisMark您可以以分钟为单位跨步以每分钟显示一个标签:

AxisMarks(values: .stride(by: .minute)) { date in
    AxisValueLabel(format: .dateTime.minute())
}
Run Code Online (Sandbox Code Playgroud)

  • 太感谢了。我不知道我怎么没有注意到我正在插值。你帮了很多忙,谢谢!现在我将尝试每两分钟获取一次数据:-)。 (2认同)