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

您需要按以下方式更新现有代码。

  1. 更新 XAxis 的数据绑定:
let chartFormatter = LineChartFormatter(labels: xValues)
let xAxis = XAxis()
xAxis.valueFormatter = chartFormatter
self.xAxis.valueFormatter = xAxis.valueFormatter
  1. 更新值格式化程序代码:

    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 中实现日期格式设置。