Вам необходимо использовать массив ChartDataEntry
для представления ваших данных.ChartDataEntry
занимает x
и y
, каждый из которых равен Double
.
Вариант 1 - Ось X на основе времени
Если вы хотите представить точки данных, расположенные по горизонтали в соответствии с датами, вам необходимо преобразовать даты в TimeInterval, например, используяDate.timeIntervalSince1970
.TimeInterval от этого преобразования станет значением x точки данных.
На самом деле пример этого есть в демонстрационном проекте библиотеки Charts - LineChartTimeViewController.swift
:
let now = Date().timeIntervalSince1970 // Here's the date to interval conversion
let hourSeconds: TimeInterval = 3600
let from = now - (Double(count) / 2) * hourSeconds
let to = now + (Double(count) / 2) * hourSeconds
let values = stride(from: from, to: to, by: hourSeconds).map { (x) -> ChartDataEntry in
let y = arc4random_uniform(range) + 50
return ChartDataEntry(x: x, y: Double(y))
}
Option2 - Основанная на индексе ось x
Если вы согласны с равным интервалом между точками данных, просто создайте массив ChartDataEntry
, используя индексы вашего исходного массива для значений x.Например:
for (index, point) in Swim.enumerated() {
let entry = ChartDataEntry(x: index, y: point[1])
data.append(entry)
}
Форматирование оси X
Для любого из этих вариантов вам потребуется реализовать протокол IAxisValueFormatter
для форматирования меток оси X
Для варианта 1 вы можете использовать value
напрямую, преобразовав его обратно в дату, затем отформатировав его в нужную вам строку
Для варианта 2 value
будет представлять индекс точки данныхв исходном массиве вы получаете к нему доступ через что-то вроде:
let date = Swim[value][0]