Как изменить метки xAxis в iOS Charts (Swift 2.3)

Я пытаюсь создать линейную диаграмму с данными за последний год. Я хочу, чтобы метки на оси xAxis диаграммы представляли месяцы с прошлого года, что, кажется, делается достаточно легко в этом руководстве: https://www.codebeaulieu.com/96/How-to-create-a-Combined-Bar-and-Line-chart-using-ios-charts. Однако эта строка кода из учебника:

let data: LineChartData = LineChartData(xVals: months, dataSets: dataSets)

где «месяцы» представляют собой массив строк, недоступны после обновления диаграммы до Swift 2.3. Для LineChartData доступны только два конструктора:

LineChartData(dataSets: <[IChartDataSet]?>)
LineChartData(dataSet: IChartDataSet?)

Таким образом, похоже, что после обновления пропала возможность изменения xVals. Была ли эта опция перенесена в другое место? Или он был полностью удален из чартов iOS?


person tdon    schedule 23.09.2016    source источник
comment
Вы можете найти решение по ссылке ниже ссылке   -  person Lun    schedule 24.09.2016


Ответы (1)


На некоторое время сдавшись, я наконец нашел решение. Вы должны создать IAxisValueFormatter и реализовать функцию stringForValue. Например, я хотел отформатировать свой график, чтобы отображать последние 12 месяцев на основе текущего месяца. Вот мой форматировщик значений:

import UIKit
import Charts

class MonthNumberFormatter: NSObject, IAxisValueFormatter {

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

    convenience init(startMonthIndex: Int){
        self.init()
        self.startMonthIndex = startMonthIndex
    }

    private func getMonth(index: Int) -> Int{
        return (index % months.count)
    }

    func stringForValue(_ value: Double, axis: AxisBase?) -> String{
        let monthIndex:Int = self.getMonth(index: Int(value) + self.startMonthIndex)
        let month = months[monthIndex]
        return month
    }
}

Затем в вашем классе диаграммы ->, чтобы получить текущий месяц:

func getCurrentMonth()->Int? {
    let todayDate = Date()
    let myCalendar = NSCalendar(calendarIdentifier: .gregorian)
    let myComponents = myCalendar?.components(.month, from: todayDate)
    let month = myComponents?.month
    return month
}

Теперь установите значения на графике

let xAxis = self.chartView.xAxis
let currentMonth = getCurrentMonth()
xAxis.valueFormatter = MonthNumberFormatter(startMonthIndex: currentMonth!)
person tdon    schedule 09.03.2017