如何更改 xAxis 标签 iOS 图表 (Swift 2.3)

Posted

技术标签:

【中文标题】如何更改 xAxis 标签 iOS 图表 (Swift 2.3)【英文标题】:How to change the xAxis labels iOS Charts (Swift 2.3) 【发布时间】:2016-09-23 17:58:35 【问题描述】:

我正在尝试创建一个包含去年数据的折线图。我想让图表 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)

其中“months”表示字符串数组,在图表更新到 Swift 2.3 后不可用。 LineChartData 唯一可用的构造函数是这两个:

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

因此,更改 xVals 的选项似乎在更新后消失了。这个选项是移到别的地方了吗?还是从 iOS 图表中完全删除?

【问题讨论】:

您可以在以下链接中找到解决方案link 【参考方案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!)

【讨论】:

以上是关于如何更改 xAxis 标签 iOS 图表 (Swift 2.3)的主要内容,如果未能解决你的问题,请参考以下文章

Highcharts悬停xAxis标签的独特价值

并非所有Xaxis标签显示在绑定数据集的图表控件上

显示图表控件 Xaxis 中的所有值

HighCharts + xAxis 标签格式化程序

在Swift 4中集成LineChartView

Plotly:如何使用 plotly express 自定义 xaxis 刻度标签?