2016-09-23 59 views
1

我在創建一個包含去年數據的折線圖。我想讓圖表的xAxis上的標籤代表去年的幾個月,這在本教程中似乎很容易完成:https://www.codebeaulieu.com/96/How-to-create-a-Combined-Bar-and-Line-chart-using-ios-charts。然而,這行代碼從教程:如何更改xAxis標籤iOS圖表(Swift 2.3)

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

其中「月」表示一個字符串數組,是不是圖表的更新到SWIFT 2.3後可用。可供LineChartData唯一的構造是這兩個:

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

如此看來,對於改變xVals的選項更新後消失。這個選項是否移動到其他地方?或者它已從iOS圖表中完全刪除?

+1

你可以找到在下面的鏈接解決方案[鏈接](http://stackoverflow.com/questions/39049188/how-to-add-strings-on-x-axis-in-ios-charts) – Lun

回答

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!)