【问题标题】:New to IoS charts not sure how to get data onto the chartIoS 图表的新手不知道如何将数据获取到图表上
【发布时间】:2018-10-30 11:36:31
【问题描述】:

所以我就去使用 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 轴上(min:sec.decimal 格式)。

只是想弄清楚数据在 ios-Charts 上的绘制方式

【问题讨论】:

  • 您是否尝试将这些数据添加到图表库中?这里github.com/danielgindi/Charts你会得到所有图表相关的问题和解决方案,如何绑定数据请检查一次。
  • 我看过这些例子。没有使用 Xarray 日期数据的示例,我不确定如何处理已实施的新 ValueFormatter 系统。所有示例均未更新。
  • ok nop 会帮助你,但是你能告诉我你的数据在上面的格式中只意味着数组数组或字典数组吗?

标签: ios swift axis-labels ios-charts


【解决方案1】:

您需要使用ChartDataEntry 的数组来表示您的数据。 ChartDataEntry 采用 xy,每个都是 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))
}

选项 2 - 基于索引的 x 轴

如果您对等间距的数据点感到满意,则只需使用原始数组的索引为 x 值创建 ChartDataEntry 数组。例如:

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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多