Как установить метки оси x с диаграммами ios

Недавно я начал использовать библиотеку диаграмм ios, и у меня возникли проблемы с поиском информации о том, как управлять осью x с обновлением swift3.

То, что я хочу сделать, это пометить ось x значениями времени, например, 2:03:00, 2:03:01, 2:03:02 и т.д. В учебниках, которые я нахожу в Интернете, это кажется очень простым; многие из них используют месяцы года в качестве метки оси x.

Однако в обновлении swift3 диаграммы теперь инициализируют значения с значениями x и y, и я не уверен, как использовать метки в этой версии библиотеки. Кто-нибудь знает, как создавать ярлыки в диаграммах с помощью swift3?

Ответ 1

Правильное решение для ярлыков X-Axis String в Swift 3+

let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
    barChartView.xAxis.valueFormatter = IndexAxisValueFormatter(values:months)
    barChartView.xAxis.granularity = 1

Ответ 2

Создайте класс следующим образом:

    import Foundation
    import Charts

    @objc(BarChartFormatter)
    class ChartFormatter:NSObject,IAxisValueFormatter{

    var months: [String]! = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]

    func stringForValue(_ value: Double, axis: AxisBase?) -> String {
    return months[Int(value)]
    }

}

Установите x-Axis следующим образом:

    let xAxis=XAxis()
    let chartFormmater=ChartFormatter()

    for i in index{
        chartFormmater.stringForValue(Double(i), axis: xAxis)
    }

    xAxis.valueFormatter=chartFormmater
    chartView.xAxis.valueFormatter=xAxis.valueFormatter

Ответ 3

Я предлагаю использовать более гибкое и красивое решение. У вас должен быть класс форматирования следующим образом:

final class MonthNameFormater: NSObject, IAxisValueFormatter {
    func stringForValue( _ value: Double, axis _: AxisBase?) -> String {
        return Calendar.current.shortMonthSymbols[Int(value)]
    }
}

Настройте этот тип на свой barChartView:

barChartView.xAxis.valueFormatter = MonthNameFormater()
barChartView.xAxis.granularity = 1.0

В результате у вас будет: Jan, Feb,..., Dec Кроме того, если вы хотите изменить вид презентации, вы должны изменить shortMonthSymbols с некоторыми другими: monthSymbols, veryShortMonthSymbols, standaloneMonthSymbols

Ответ 4

Swift 4.2

У меня довольно хорошие результаты при использовании стандартного DateFormatter() Я конвертирую метку времени UNIX в формат day.month

final class XAxisNameFormater: NSObject, IAxisValueFormatter {

    func stringForValue( _ value: Double, axis _: AxisBase?) -> String {

        let formatter = DateFormatter()
        formatter.locale = Locale(identifier: "en_US_POSIX")
        formatter.dateFormat = "dd.MM"

        return formatter.string(from: Date(timeIntervalSince1970: value))
    }

}

Использование:

self.lineChartView.xAxis.valueFormatter = XAxisNameFormater()
self.lineChartView.xAxis.granularity = 1.0

Ответ 5

Вы можете сделать это, создав свой собственный форматер для времени. Ниже я приведу пример кода для этого.

    public class DateValueFormatter: NSObject, AxisValueFormatter {
    private let dateFormatter = DateFormatter()

    override init() {
        super.init()
        dateFormatter.dateFormat = "HH:mm:ss"
    }

    public func stringForValue(_ value: Double, axis: AxisBase?) -> String {
        return dateFormatter.string(from: Date(timeIntervalSince1970: value))
    }
}

Чтобы установить свое значение просто используйте код ниже.

self.yourChart.xAxis.valueFormatter = DateValueFormatter()
self.yourChart.xAxis.granularity = 1.0