Итак, я работаю со сторонней платформой под названием «Графики» для обработки отображения данных о весе в моем приложении.Но это выглядит странно, вот фотография того, как это выглядит, а затем мой код после него.
Некоторые значения верны, но только 2 измои 4 значения веса отображаются, более того, указанная ниже дата увеличивается с шагом в 6 месяцев, я не знаю почему, потому что я никогда не указывал это в своем коде, они не совпадают с моими значениями веса.Вот мои весовые объекты, которые я хочу отобразить.
"progressWeights": [
{
"weight": "200",
"_id": "5af4c835b83893a9754b82ec",
"createdOn": "2010-05-10T00:00:00.000Z"
},
{
"weight": "145",
"_id": "5afe6614cbd4ff00323461ed",
"createdOn": "2018-05-17T07:00:00.000Z"
},
{
"weight": "153",
"_id": "5b0cbc8db62b190844cce1e9",
"createdOn": "2010-05-28T00:00:00.000Z"
},
{
"weight": "185",
"_id": "5b0cbcadb62b190844cce1ea",
"createdOn": "2018-05-25T00:00:00.000Z"
}
]
Теперь вот часть моего кода весовой диаграммы:
// Chart Data
var weightData = [String]()
var weightUploadDates = [String]()
func lineChartSetup() {
// convertToDate and millisecondsSince1970 are helper methods, output is time interval
let uploadDates = weightUploadDates.map({ convertToDate(str: $0).millisecondsSince1970 })
// Line chart population
setLineChart(dataPoints: weightData, values: uploadDates)
}
func setLineChart(dataPoints: [String], values: [Int]) {
/*
Here are what params are holding currently
dataPoints:
▿ 4 elements
- "200"
- "145"
- "153"
- "185"
values:
▿ 4 elements
- 1273449600000
- 1526540400000
- 1275004800000
- 1527206400000
*/
var idx = 0
// data point setup and color config
for i in dataPoints {
let dataPoint = ChartDataEntry(x: Double(values[idx]), y: Double(i)!)
dataEntry.append(dataPoint)
idx += 1
}
// Setting up the data set for chart
let chartDataSet = LineChartDataSet(values: dataEntry, label: "Weight")
let chartData = LineChartData()
chartData.addDataSet(chartDataSet)
// Axes Setup
let formatter: ChartFormatter = ChartFormatter()
let str = values.map({ String($0) })
formatter.setValues(values: str)
let xaxis: XAxis = XAxis()
xaxis.valueFormatter = formatter
lineChartView.xAxis.labelPosition = .bottom
lineChartView.xAxis.drawGridLinesEnabled = false
lineChartView.xAxis.valueFormatter = xaxis.valueFormatter // I think this might be the problem?
lineChartView.data = chartData
}
Я считаю, что источником проблемы является значение оси xformatter, как вы можете видеть на рисунке выше, даты не совпадают ни с одним из объектов веса, и они не соответствуют должным образом моим данным веса.Вот мой код форматирования значения:
public class ChartFormatter: NSObject, IAxisValueFormatter {
var weightData = [String]()
// This sets the x axis? - Dates go up by 6 months for some reason?...
public func stringForValue(_ value: Double, axis: AxisBase?) -> String {
//print("String for value desc \(value)")
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MM/dd"
let date = dateFormatter.string(from: Date(timeIntervalSince1970: value))
return date
}
public func setValues(values: [String]) {
self.weightData = values
}
}
Когда моя диаграмма отображается, оператор print в методе stringForValue вызывается почти сто раз, вот некоторые из выводимых данных:
String for vlaue desc 1280000000000.0
The date value: 08/02
String for vlaue desc 1320000000000.0
The date value: 02/18
String for vlaue desc 1360000000000.0
The date value: 09/07
String for vlaue desc 1400000000000.0
The date value: 03/27
String for vlaue desc 1440000000000.0
The date value: 10/13
String for vlaue desc 1480000000000.0
Кажется, что мое первое значение даты (1273449600000) округляется до 1280000000000.0, а затем 40000000000 добавляется для каждой итерации?Я не знаю, откуда это исходит, и это не должно делать это.
Так что это моя проблема, есть идеи, как заставить ось х хранить только те 4 объекта даты, которые у меня есть, и сделать так, чтобы она соответствовала своему значению веса?Любая помощь приветствуется.Дайте мне знать, если вам нужна дополнительная информация.