图表在 xAxis 上绘制日期

问题描述

我有从服务调用中以日期字符串的形式返回的数据。我想转换日期字符串,以便我可以按以下格式绘制它们,即“HH:mm”。该图绘制正确,但 xAxis 的小时和分钟时间错误。当我点击图表时,我得到的 xValue 与显示的非常不同。

关于如何显示 xAxis 的正确值的任何想法。

示例 Json 数据:

[
  {
    "timestamputc": "2021-02-14T22:15:00"
  },{
    "timestamputc": "2021-02-14T22:20:00"
  },{
    "timestamputc": "2021-02-14T22:25:00"
  },{
    "timestamputc": "2021-02-14T22:30:00"
  },{
    "timestamputc": "2021-02-14T22:35:00"
  },{
    "timestamputc": "2021-02-14T22:40:00"
  },{
    "timestamputc": "2021-02-14T22:50:00"
  },{
    "timestamputc": "2021-02-14T22:55:00"
  },{
    "timestamputc": "2021-02-14T23:00:00"
  },{
    "timestamputc": "2021-02-14T23:05:00"
  },{
    "timestamputc": "2021-02-14T23:10:00"
  },{
    "timestamputc": "2021-02-14T23:15:00"
  },{
    "timestamputc": "2021-02-14T23:20:00"
  },{
    "timestamputc": "2021-02-14T23:25:00"
  },{
    "timestamputc": "2021-02-14T23:30:00"
  },{
    "timestamputc": "2021-02-14T23:35:00"
  },{
    "timestamputc": "2021-02-14T23:40:00"
  },{
    "timestamputc": "2021-02-14T23:45:00"
  },{
    "timestamputc": "2021-02-14T23:50:00"
  },{
    "timestamputc": "2021-02-14T23:55:00"
  },{
    "timestamputc": "2021-02-15T00:00:00"
  },{
    "timestamputc": "2021-02-15T00:05:00"
  },{
    "timestamputc": "2021-02-15T00:10:00"
  },{
    "timestamputc": "2021-02-15T00:15:00"
  },{
    "timestamputc": "2021-02-15T00:20:00"
  },{
    "timestamputc": "2021-02-15T00:25:00"
  },{
    "timestamputc": "2021-02-15T00:30:00"
  },{
    "timestamputc": "2021-02-15T00:35:00"
  },{
    "timestamputc": "2021-02-15T00:40:00"
  },{
    "timestamputc": "2021-02-15T00:45:00"
  },{
    "timestamputc": "2021-02-15T00:50:00"
  },{
    "timestamputc": "2021-02-15T00:55:00"
  },{
    "timestamputc": "2021-02-15T01:00:00"
  },{
    "timestamputc": "2021-02-15T01:05:00"
  },{
    "timestamputc": "2021-02-15T01:10:00"
  },{
    "timestamputc": "2021-02-15T01:15:00"
  },{
    "timestamputc": "2021-02-15T01:20:00"
  },{
    "timestamputc": "2021-02-15T01:25:00"
  },{
    "timestamputc": "2021-02-15T01:30:00"
  },{
    "timestamputc": "2021-02-15T01:35:00"
  },{
    "timestamputc": "2021-02-15T01:40:00"
  },{
    "timestamputc": "2021-02-15T01:45:00"
  },{
    "timestamputc": "2021-02-15T01:50:00"
  },{
    "timestamputc": "2021-02-15T01:55:00"
  },{
    "timestamputc": "2021-02-15T02:00:00"
  },{
    "timestamputc": "2021-02-15T02:05:00"
  },{
    "timestamputc": "2021-02-15T02:10:00"
  },{
    "timestamputc": "2021-02-15T02:15:00"
  },{
    "timestamputc": "2021-02-15T02:20:00"
  },{
    "timestamputc": "2021-02-15T02:25:00"
  },{
    "timestamputc": "2021-02-15T02:30:00"
  },{
    "timestamputc": "2021-02-15T02:35:00"
  },{
    "timestamputc": "2021-02-15T02:40:00"
  },{
    "timestamputc": "2021-02-15T02:45:00"
  },{
    "timestamputc": "2021-02-15T02:50:00"
  },{
    "timestamputc": "2021-02-15T02:55:00"
  },{
    "timestamputc": "2021-02-15T03:00:00"
  },{
    "timestamputc": "2021-02-15T03:05:00"
  },{
    "timestamputc": "2021-02-15T03:10:00"
  },{
    "timestamputc": "2021-02-15T03:15:00"
  },{
    "timestamputc": "2021-02-15T03:20:00"
  },{
    "timestamputc": "2021-02-15T03:25:00"
  },{
    "timestamputc": "2021-02-15T03:30:00"
  },{
    "timestamputc": "2021-02-15T03:35:00"
  },{
    "timestamputc": "2021-02-15T03:40:00"
  },{
    "timestamputc": "2021-02-15T03:45:00"
  },{
    "timestamputc": "2021-02-15T03:50:00"
  },{
    "timestamputc": "2021-02-15T03:55:00"
  },{
    "timestamputc": "2021-02-15T04:00:00"
  },{
    "timestamputc": "2021-02-15T04:05:00"
  },{
    "timestamputc": "2021-02-15T04:10:00"
  },{
    "timestamputc": "2021-02-15T04:15:00"
  },{
    "timestamputc": "2021-02-15T04:20:00"
  },{
    "timestamputc": "2021-02-15T04:25:00"
  },{
    "timestamputc": "2021-02-15T04:30:00"
  },{
    "timestamputc": "2021-02-15T04:35:00"
  },{
    "timestamputc": "2021-02-15T04:40:00"
  },{
    "timestamputc": "2021-02-15T04:45:00"
  },{
    "timestamputc": "2021-02-15T04:50:00"
  },{
    "timestamputc": "2021-02-15T04:55:00"
  },{
    "timestamputc": "2021-02-15T05:00:00"
  },{
    "timestamputc": "2021-02-15T05:05:00"
  },{
    "timestamputc": "2021-02-15T05:15:00"
  },{
    "timestamputc": "2021-02-15T05:20:00"
  },{
    "timestamputc": "2021-02-15T05:25:00"
  },{
    "timestamputc": "2021-02-15T05:30:00"
  },{
    "timestamputc": "2021-02-15T05:35:00"
  },{
    "timestamputc": "2021-02-15T05:40:00"
  },{
    "timestamputc": "2021-02-15T05:45:00"
  },{
    "timestamputc": "2021-02-15T05:50:00"
  },{
    "timestamputc": "2021-02-15T05:55:00"
  },{
    "timestamputc": "2021-02-15T06:00:00"
  },{
    "timestamputc": "2021-02-15T06:05:00"
  },{
    "timestamputc": "2021-02-15T06:10:00"
  },{
    "timestamputc": "2021-02-15T06:15:00"
  },{
    "timestamputc": "2021-02-15T06:20:00"
  },{
    "timestamputc": "2021-02-15T06:25:00"
  },{
    "timestamputc": "2021-02-15T06:30:00"
  },{
    "timestamputc": "2021-02-15T06:35:00"
  },{
    "timestamputc": "2021-02-15T06:40:00"
  },{
    "timestamputc": "2021-02-15T06:45:00"
  },{
    "timestamputc": "2021-02-15T06:50:00"
  },{
    "timestamputc": "2021-02-15T06:55:00"
  },{
    "timestamputc": "2021-02-15T07:00:00"
  },{
    "timestamputc": "2021-02-15T07:05:00"
  },{
    "timestamputc": "2021-02-15T07:10:00"
  },{
    "timestamputc": "2021-02-15T07:15:00"
  },{
    "timestamputc": "2021-02-15T07:20:00"
  },{
    "timestamputc": "2021-02-15T07:25:00"
  },{
    "timestamputc": "2021-02-15T07:30:00"
  },{
    "timestamputc": "2021-02-15T07:35:00"
  },{
    "timestamputc": "2021-02-15T07:40:00"
  },{
    "timestamputc": "2021-02-15T07:45:00"
  },{
    "timestamputc": "2021-02-15T07:50:00"
  },{
    "timestamputc": "2021-02-15T07:55:00"
  },{
    "timestamputc": "2021-02-15T08:00:00"
  },{
    "timestamputc": "2021-02-15T08:05:00"
  },{
    "timestamputc": "2021-02-15T08:10:00"
  },{
    "timestamputc": "2021-02-15T08:15:00"
  },{
    "timestamputc": "2021-02-15T08:20:00"
  },{
    "timestamputc": "2021-02-15T08:25:00"
  },{
    "timestamputc": "2021-02-15T08:30:00"
  },{
    "timestamputc": "2021-02-15T08:35:00"
  },{
    "timestamputc": "2021-02-15T08:40:00"
  },{
    "timestamputc": "2021-02-15T08:45:00"
  },{
    "timestamputc": "2021-02-15T08:50:00"
  },{
    "timestamputc": "2021-02-15T08:55:00"
  },{
    "timestamputc": "2021-02-15T09:00:00"
  },{
    "timestamputc": "2021-02-15T09:05:00"
  },{
    "timestamputc": "2021-02-15T09:10:00"
  },{
    "timestamputc": "2021-02-15T09:15:00"
  },{
    "timestamputc": "2021-02-15T09:20:00"
  },{
    "timestamputc": "2021-02-15T09:25:00"
  },{
    "timestamputc": "2021-02-15T09:30:00"
  },{
    "timestamputc": "2021-02-15T09:35:00"
  },{
    "timestamputc": "2021-02-15T09:40:00"
  },{
    "timestamputc": "2021-02-15T09:45:00"
  },{
    "timestamputc": "2021-02-15T09:50:00"
  },{
    "timestamputc": "2021-02-15T09:55:00"
  },{
    "timestamputc": "2021-02-15T10:00:00"
  },{
    "timestamputc": "2021-02-15T10:05:00"
  },{
    "timestamputc": "2021-02-15T10:10:00"
  },{
    "timestamputc": "2021-02-15T10:15:00"
  },{
    "timestamputc": "2021-02-15T10:20:00"
  },{
    "timestamputc": "2021-02-15T10:25:00"
  },{
    "timestamputc": "2021-02-15T10:30:00"
  },{
    "timestamputc": "2021-02-15T10:35:00"
  },{
    "timestamputc": "2021-02-15T10:40:00"
  },{
    "timestamputc": "2021-02-15T10:45:00"
  },{
    "timestamputc": "2021-02-15T10:50:00"
  },{
    "timestamputc": "2021-02-15T10:55:00"
  },{
    "timestamputc": "2021-02-15T11:00:00"
  },{
    "timestamputc": "2021-02-15T11:05:00"
  },{
    "timestamputc": "2021-02-15T11:10:00"
  },{
    "timestamputc": "2021-02-15T11:15:00"
  },{
    "timestamputc": "2021-02-15T11:20:00"
  },{
    "timestamputc": "2021-02-15T11:25:00"
  },{
    "timestamputc": "2021-02-15T11:30:00"
  },{
    "timestamputc": "2021-02-15T11:35:00"
  },{
    "timestamputc": "2021-02-15T11:40:00"
  },{
    "timestamputc": "2021-02-15T11:45:00"
  },{
    "timestamputc": "2021-02-15T11:50:00"
  },{
    "timestamputc": "2021-02-15T11:55:00"
  },{
    "timestamputc": "2021-02-15T12:00:00"
  },{
    "timestamputc": "2021-02-15T12:05:00"
  },{
    "timestamputc": "2021-02-15T12:10:00"
  },{
    "timestamputc": "2021-02-15T12:15:00"
  },{
    "timestamputc": "2021-02-15T12:20:00"
  },{
    "timestamputc": "2021-02-15T12:25:00"
  },{
    "timestamputc": "2021-02-15T12:30:00"
  },{
    "timestamputc": "2021-02-15T12:35:00"
  },{
    "timestamputc": "2021-02-15T12:40:00"
  },{
    "timestamputc": "2021-02-15T12:45:00"
  },{
    "timestamputc": "2021-02-15T12:50:00"
  },{
    "timestamputc": "2021-02-15T12:55:00"
  },{
    "timestamputc": "2021-02-15T13:00:00"
  },{
    "timestamputc": "2021-02-15T13:05:00"
  },{
    "timestamputc": "2021-02-15T13:10:00"
  },{
    "timestamputc": "2021-02-15T13:15:00"
  },{
    "timestamputc": "2021-02-15T13:20:00"
  },{
    "timestamputc": "2021-02-15T13:25:00"
  },{
    "timestamputc": "2021-02-15T13:30:00"
  },{
    "timestamputc": "2021-02-15T13:35:00"
  },{
    "timestamputc": "2021-02-15T13:40:00"
  },{
    "timestamputc": "2021-02-15T13:45:00"
  }
]

我用来绘制 X 轴日期的辅助函数

extension String {
    func getDate() -> Date? {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
        dateFormatter.timeZone = TimeZone.current
        dateFormatter.locale = Locale.current
        return dateFormatter.date(from: self)
    }
}


extension Date {
    
    var milliseconds: Double {
        return self.timeIntervalSince1970 * 1000
    }
    
     self.init(timeIntervalSince1970: TimeInterval(milliseconds) / 1000)

    init(millisecondsSince1970: Double) {
        self.init(timeIntervalSince1970: TimeInterval(millisecondsSince1970) / 1000)
    }
    
    func stringDate(with dateFormat: String) -> String {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = dateFormat
        return dateFormatter.string(from: self)
    }
}

将数据传递到图中:

    func onFetchSuccess(data: [TestData]) {
        
        let values = data.map { $0.marketDataOpen }
        let dataPoints = data.map { $0.timestampuTC.milliseconds }
        
        setChart(dataPoints: dataPoints,values: values)
        
    }



    func setChart(dataPoints: [Double],values: [Double]) {
        dataEntries = []
        
        for index in 0 ..< dataPoints.count {
            dataEntries.append(ChartDataEntry(x: dataPoints[index],y: values[index]))
        }
        
        let lineChartDataSet = LineChartDataSet(entries: dataEntries,label: "Units Consumed")
        
        lineChartDataSet.axisDependency = .right
        lineChartDataSet.setColor(Colors.plumLightColor)
        lineChartDataSet.linewidth = 2.0
        lineChartDataSet.circleRadius = 0
        lineChartDataSet.highlightColor = Colors.plumLightColor
        lineChartDataSet.highlightlinewidth = 1.0
        lineChartDataSet.highlightLineDashLengths = [5]
        
        
        var dataSets = [LineChartDataSet]()
        dataSets.append(lineChartDataSet)
        
        let lineChartData = LineChartData(dataSets: dataSets)
        lineChartData.setDrawValues(false)
        
        chartView.data = lineChartData
        chartView.rightAxis.enabled = true
        chartView.leftAxis.enabled = false
        chartView.xAxis.drawGridLinesEnabled = true
        chartView.xAxis.labelPosition = .bottom
        chartView.xAxis.valueFormatter = DateValueFormatter()
        
        chartView.xAxis.granularity = 1.0
        chartView.legend.enabled = false
        chartView.rightAxis.axislinewidth = 2.0
        chartView.rightAxis.gridlinewidth = 1
        chartView.xAxis.axislinewidth = 2.0
        chartView.xAxis.gridlinewidth = 1
        chartView.xAxis.gridColor = Colors.backgroundGray
        chartView.rightAxis.gridColor = Colors.backgroundGray
        chartView.rightAxis.valueFormatter = YAxisValueFormatter()
        
    }

日期值格式器:

class DateValueFormatter: NSObject,IAxisValueFormatter {
    private let dateFormatter = DateFormatter()
    
    override init() {
        super.init()
        dateFormatter.dateFormat = "HH:mm"
    }
    
    func stringForValue(_ value: Double,axis: AxisBase?) -> String {
        let formattedDate = Date(timeIntervalSince1970: value)
        return dateFormatter.string(from: formattedDate)
    }
}

图形是什么样的:

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)