我最近开始使用ios图表库,但很难找到有关如何使用swift3更新操作x轴的信息。
我想要做的是用时间值标记x轴,例如2:03:00,2:03:01,2:03:02等在我在网上找到的教程中,这似乎很容易;他们中的许多人使用一年中的几个月作为x轴标签。
但是,在swift3更新中,图表现在使用x和y值初始化值,我不知道如何在此版本的库中使用标签。有谁知道如何使用swift3在图表中创建标签?
答案 0 :(得分:33)
适用于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
答案 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
答案 2 :(得分: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
答案 3 :(得分:1)
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
答案 4 :(得分:0)
我在创建班级作为以前的答案时遇到问题
“没有名为“ IChartAxisValueFormatter”的类型或协议”
我删除了NSObject
继承,只留下了IAxisValueFormatter
,如下所示:
final class XAxisNameFormater: IAxisValueFormatter {.....