Новые для IoS диаграммы не уверены, как получить данные на диаграмму - PullRequest
0 голосов
/ 20 мая 2018

Итак, я пошел использовать ios-Charts ...

У меня есть два набора данных.

Один - это значение времени (прошедшее время для оси Y), а другой - значение даты для (ось X)

Я предполагаю, что хочу использовать линейный график,

Я просто новичок в библиотеке.

Ниже приведен пример данных, которые у меня будут:

Swims = [["Dec 1,2017",241.1],["Feb 4,2018",237.23],["Feb 21,2018",233.1],["Mar 23,2018",222.1],["Apr 1,2018",240.23],["Apr 15,2018",199.34]]

Даты будут указаны по оси X, а длительность - в (мин: сек.десятичном формате) по оси Y.

Просто пытаюсь понять, как данные наносятся на диаграммы ios-Charts

1 Ответ

0 голосов
/ 24 мая 2018

Вам необходимо использовать массив 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]
...