如何使用ios图表设置x轴标签

问题描述 投票:14回答:5

我最近开始使用ios图表库,但很难找到有关如何使用swift3更新操作x轴的信息。

我想要做的是用时间值标记x轴,例如2:03:00,2:03:01,2:03:02等在我在网上找到的教程中,这似乎很容易;他们中的许多人使用一年中的几个月作为x轴标签。

但是,在swift3更新中,图表现在使用x和y值初始化值,我不知道如何在此版本的库中使用标签。有谁知道如何使用swift3在图表中创建标签?

ios swift swift3 ios-charts
5个回答
34
投票

适用于Swift 3+中X轴字符串标签的解决方案

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

13
投票

创建一个这样的类:

    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轴:

    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


2
投票

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

0
投票

您可以通过创建自己的格式化程序来实现此目的。下面我提一下示例代码供您参考。

    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
© www.soinside.com 2019 - 2024. All rights reserved.