Ich habe eine ähnliche Frage hier gefunden, aber die Antwort hat mir nicht geholfen. Ich denke aufgrund meiner Datenstruktur.iOS Charts 3 - X-Labels (Daten) mit Plots ausrichten
Ich habe ein Array aus einzelnen Arrays, jede für eine eigene Zeile im Diagramm. Dies besteht dann aus mehreren Strukturen für die Plotpunkte dieser Linie.
Mein Problem ist, dass Werte/Zeilen korrekt sind, aber nicht korrekt mit den Daten ausgerichtet sind. Im folgenden Beispiel. Die Termine beginnen am 3. Mai und enden am 8. Mai. Bitte helfen
hier ist mein Code
struct chartPoint {
let date:String
var total:Double
let exercise:String
}
var sets:[[chartPoint]] = []
func setupLineChart() {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
var dataSets:[LineChartDataSet] = []
var color:[UIColor] = [UIColor.red,UIColor.blue, UIColor.green,UIColor.red,UIColor.red,UIColor.red,UIColor.red]
for i in sets { //Array of array of structs
let sort = i.sorted { // sort the internal array by date
item1, item2 in
let date1 = dateFormatter.date(from:item1.date)
let date2 = dateFormatter.date(from:item2.date)
return date1!.compare(date2!) == ComparisonResult.orderedAscending
}
var dataEntries: [ChartDataEntry] = []
for stat in 0...(sort.count - 1) {
let date = dateFormatter.date(from:sort[stat].date)
let timeIntervalForDate: TimeInterval = date!.timeIntervalSince1970
let dataEntry = ChartDataEntry(x: Double(timeIntervalForDate), y: sort[stat].total)
dataEntries.append(dataEntry)
if stat == (sort.count - 1){
let chartDataSet = LineChartDataSet(values: dataEntries, label: "\(sort[stat].exercise)")
chartDataSet.setCircleColor(color[stat])
chartDataSet.setColor(color[stat], alpha: 1.0)
chartDataSet.drawValuesEnabled = true
dataSets.append(chartDataSet)
startChart(dataSets: dataSets)
}
}
}
}
func startChart(dataSets:[LineChartDataSet]){
testLineChartView.animate(xAxisDuration: 0.7, yAxisDuration: 0.7)
testLineChartView.dragEnabled = true
testLineChartView.legend.form = .circle
testLineChartView.drawGridBackgroundEnabled = false
let xaxis = testLineChartView.xAxis
xaxis.valueFormatter = axisFormatDelegate
xaxis.labelCount = dataSets.count
xaxis.granularityEnabled = true
xaxis.granularity = 1.0
xaxis.centerAxisLabelsEnabled = true
xaxis.avoidFirstLastClippingEnabled = true
xaxis.drawLimitLinesBehindDataEnabled = true
let rightAxis = testLineChartView.rightAxis
rightAxis.enabled = false
let leftAxis = testLineChartView.leftAxis
leftAxis.drawZeroLineEnabled = true
leftAxis.drawGridLinesEnabled = true
axisFormatDelegate = self
testLineChartView.delegate = self
let chartData = LineChartData(dataSets: dataSets)
testLineChartView.data = chartData
testLineChartView.chartDescription?.text = ""
}
extension ChartViewController: IAxisValueFormatter {
func stringForValue(_ value: Double, axis: AxisBase?) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd MMM"
let date = Date(timeIntervalSince1970: value)
return dateFormatter.string(from: date)
}
}
Ist das nicht das gleiche wie (lassen xaxis = testLineChartView.xAxis xaxis.valueFormatter = axisFormatDelegate) zu sein? – ThundercatChris
Ich habe meinen Code aktualisiert, um zu zeigen, welcher Satz ist. Es ist im Grunde ein Array mit Arrays von Plot-Punkten, die aus Arrays von Strukturen bestehen. Auf diese Weise kann eine Zeile mehrere Zeichenpunkte innerhalb eines Arrays haben und eine andere Zeile kann ihre eigenen haben. Ich hoffe, dass das Sinn macht – ThundercatChris
Ich habe auch versucht, mit einem Array von Datumszeichenfolgen (ich denke, das ist, was Sie vorgeschlagen haben), aber wieder sind sie falsch ausgerichtet. Ich denke nicht, dass die Saiten das Problem sind. es ist der Offset – ThundercatChris