iOS 图表库中的自定义 xAxis 格式
Custom xAxis formatting in iOS Charts library
我正在使用以下库在我的 iOS 应用程序中实现图表:
https://github.com/danielgindi/Charts
在 xAxis 上,我希望使用类似于屏幕截图中的格式。
我想显示一次月份名称,然后显示该月份的天数(没有月份名称),当月份更改时,再次显示名称。
有人能指出正确的方向吗?
xAxis 配置的当前代码,显示每个条目的月份和日期:
xAxis.drawAxisLineEnabled = true
xAxis.drawGridLinesEnabled = false
xAxis.centerAxisLabelsEnabled = true
xAxis.drawLabelsEnabled = true
xAxis.axisLineColor = R.Color.Chart.Alpha.separator
xAxis.labelTextColor = R.Color.Chart.Alpha.content
xAxis.labelPosition = .bottom
xAxis.labelCount = 5
xAxis.valueFormatter = XAxisValueFormatter()
class XAxisValueFormatter: AxisValueFormatter {
func stringForValue(_ value: Double, axis: AxisBase?) -> String {
let date = Date(timeIntervalSince1970: value)
return date.to(DateFormat.monthday)
}
}
您需要按以下方式更新现有代码。
- 更新 XAxis 的数据绑定:
let chartFormatter = LineChartFormatter(labels: xValues)
let xAxis = XAxis()
xAxis.valueFormatter = chartFormatter
self.xAxis.valueFormatter = xAxis.valueFormatter
更新值格式化程序代码:
private class LineChartFormatter: NSObject, IAxisValueFormatter {
var labels: [String] = []
let dateFormatter = DateFormatter()
let dateShortFormatter = DateFormatter()
func stringForValue(_ value: Double, axis: AxisBase?) -> String {
if let date = dateFormatter.date(from:labels[Int(value)]) {
if value == 0 {
dateShortFormatter.dateFormat = "MMM dd"
return dateShortFormatter.string(from: date)
} else {
let prevDate = dateFormatter.date(from:labels[Int(value - 1)])
dateShortFormatter.dateFormat = "MMM"
if dateShortFormatter.string(from: date) != dateShortFormatter.string(from: prevDate!) {
dateShortFormatter.dateFormat = "MMM dd"
return dateShortFormatter.string(from: date)
} else {
dateShortFormatter.dateFormat = "dd"
return dateShortFormatter.string(from: date)
}
}
} else {
return labels[Int(value)]
}
}
init(labels: [String]) {
super.init()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z"
self.labels = labels
}}
通过更改以上代码,您将在 XAxis 中实现日期格式设置。
我正在使用以下库在我的 iOS 应用程序中实现图表: https://github.com/danielgindi/Charts
在 xAxis 上,我希望使用类似于屏幕截图中的格式。 我想显示一次月份名称,然后显示该月份的天数(没有月份名称),当月份更改时,再次显示名称。
有人能指出正确的方向吗?
xAxis 配置的当前代码,显示每个条目的月份和日期:
xAxis.drawAxisLineEnabled = true
xAxis.drawGridLinesEnabled = false
xAxis.centerAxisLabelsEnabled = true
xAxis.drawLabelsEnabled = true
xAxis.axisLineColor = R.Color.Chart.Alpha.separator
xAxis.labelTextColor = R.Color.Chart.Alpha.content
xAxis.labelPosition = .bottom
xAxis.labelCount = 5
xAxis.valueFormatter = XAxisValueFormatter()
class XAxisValueFormatter: AxisValueFormatter {
func stringForValue(_ value: Double, axis: AxisBase?) -> String {
let date = Date(timeIntervalSince1970: value)
return date.to(DateFormat.monthday)
}
}
您需要按以下方式更新现有代码。
- 更新 XAxis 的数据绑定:
let chartFormatter = LineChartFormatter(labels: xValues) let xAxis = XAxis() xAxis.valueFormatter = chartFormatter self.xAxis.valueFormatter = xAxis.valueFormatter
更新值格式化程序代码:
private class LineChartFormatter: NSObject, IAxisValueFormatter { var labels: [String] = [] let dateFormatter = DateFormatter() let dateShortFormatter = DateFormatter() func stringForValue(_ value: Double, axis: AxisBase?) -> String { if let date = dateFormatter.date(from:labels[Int(value)]) { if value == 0 { dateShortFormatter.dateFormat = "MMM dd" return dateShortFormatter.string(from: date) } else { let prevDate = dateFormatter.date(from:labels[Int(value - 1)]) dateShortFormatter.dateFormat = "MMM" if dateShortFormatter.string(from: date) != dateShortFormatter.string(from: prevDate!) { dateShortFormatter.dateFormat = "MMM dd" return dateShortFormatter.string(from: date) } else { dateShortFormatter.dateFormat = "dd" return dateShortFormatter.string(from: date) } } } else { return labels[Int(value)] } } init(labels: [String]) { super.init() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z" self.labels = labels }}
通过更改以上代码,您将在 XAxis 中实现日期格式设置。