Charts: [Swift 3] LineChartData ohne xVals im Konstruktor

Erstellt am 7. Nov. 2016  ·  12Kommentare  ·  Quelle: danielgindi/Charts

Ich weiß, dass "Alle Dataset-Konstruktoren sich geändert haben - sie nehmen kein Array von x-Indizes mehr an", aber wie füge ich jetzt Strings auf meine x-Achse, wenn LineChartData keine "xVals" -Parameter mehr hat ???
Früher war das so einfach...

let weights: [Double] = self.getWeigths()
let weightDates: [String] = self.getWeightDates()

var yValues : [ChartDataEntry] = [ChartDataEntry]()
    for i in 0 ..< dateLastWeights.count {
        let entry = ChartDataEntry(x: Double(i), y: weights[i])
        yValues.append(entry)
    }
let set: LineChartDataSet = LineChartDataSet(values: yValues, label: "First Set")
var dataSets : [LineChartDataSet] = [LineChartDataSet]()
dataSets.append(set)

let data: LineChartData = LineChartData(xVals: weightDates, dataSets: dataSets)
self.lineChart.data = data

Hilfreichster Kommentar

Ich hatte auch damit zu kämpfen, aber schließlich habe ich es herausgefunden. Sie müssen es tatsächlich in der BarChartView selbst mit einem Achsenwertformatierer einstellen:

let labels = ["Value 1", "Value 2", "Value 3"]
barChartView.xAxis.valueFormatter = DefaultAxisValueFormatter(block: {(index, _) in
    return labels[Int(index)]
})

Es ist definitiv nicht so sauber wie die vorherige Methode.


BEARBEITEN von danielgindi

Seit 3.0.1 können Sie auch Folgendes tun:

barChartView.xAxis.valueFormatter = IndexAxisValueFormatter(values: labels)

Außerdem möchten Sie wahrscheinlich Folgendes hinzufügen:

barChartView.xAxis.granularity = 1.0

Alle 12 Kommentare

Ich hatte auch damit zu kämpfen, aber schließlich habe ich es herausgefunden. Sie müssen es tatsächlich in der BarChartView selbst mit einem Achsenwertformatierer einstellen:

let labels = ["Value 1", "Value 2", "Value 3"]
barChartView.xAxis.valueFormatter = DefaultAxisValueFormatter(block: {(index, _) in
    return labels[Int(index)]
})

Es ist definitiv nicht so sauber wie die vorherige Methode.


BEARBEITEN von danielgindi

Seit 3.0.1 können Sie auch Folgendes tun:

barChartView.xAxis.valueFormatter = IndexAxisValueFormatter(values: labels)

Außerdem möchten Sie wahrscheinlich Folgendes hinzufügen:

barChartView.xAxis.granularity = 1.0

@esalter-va Ja! Das funktioniert wirklich!! Aber irgendwie zeigt die Grafik mehr Indizes an, als sie sollte ... Sie zeigt bizarre Dezimalzahlen für den Parameter "Index" wie (3.5; 0; 0.69; 1.39; 2.09; 2.79; 3.5) und wandelt dann in Int (3; 1 .) um ; 1; 2; 2; 3) aber mein yValues ​​hat nur 4 Elemente... Haben Sie diese Art von Problem?

Niemals! Dieses Problem lag an der Granularität! Ich habe Granularität = 1 versucht und funktioniert!

@reicamargo Vielen Dank, dass Sie Ihre Lösung tatsächlich

barChart.xAxis.granularity = 1

Hallo Leute. Sie können tatsächlich das neue IndexAxisValueFormatter , das auf Grenzen usw. testet und das alte Indexverhalten simuliert.

Also chart.xAxis.valueFormatter = IndexAxisValueFormatter(values: ["first index", "second index", "third index"]) , kombiniert mit granularity = 1 wird gut ausreichen :-)

Wenn Sie die Granularität nicht festgelegt haben, verhält sich dies immer noch korrekt und zeigt keine Beschriftungen für gebrochene Werte an. Das bedeutet also, dass Labels ausgeblendet werden können, wenn keine ganzen Werte gerendert werden;

Wie kommt es, dass ich, wenn ich die ganze xAxis-Sache mache, einen fatalen Fehler erhalte: PieChart hat keine XAxis:-Datei?

@danielgindi es gibt jemanden, der sagt, dass IndexAxisValueFormatter Probleme beim Zoomen hat https://github.com/danielgindi/Charts/issues/1909.

@danielgindi sollten wir das für jeden Satz tun? oder sollte es sein, nachdem wir das DataSet mit allen Sets erstellt haben

Vielen Dank

Es tut mir leid, zu einem geschlossenen Thema zu posten. Ich habe jedoch das gleiche Problem, diese Lösung funktioniert bei mir nicht.
mein Problem

Ich entschuldige mich, dass ich auch zu einem geschlossenen Thema gepostet habe, aber ich habe dies in den letzten 7 Stunden gelesen und bin verloren. Angenommen, Sie möchten für jeden Tag der Woche eine x-Achsenbeschriftung haben. Wenn Sie die von esalter-va bereitgestellte Lösung verwenden, scheinen die Labels von den Backing-Daten abhängig zu sein. Das heißt, wenn Sie nur Daten für Montag haben, entspricht der vom Wertformatierer referenzierte Index immer nur der Int-Darstellung für Montag und keinen anderen Tag. Somit erhalten Sie nur ein Etikett (Montag). Wenn Sie für jeden Tag ein Etikett haben möchten, egal ob Sie Daten für diesen Tag haben, wie machen Sie das?

@bsachetta. Du bist nicht alleine. Ich kämpfe seit Wochen mit diesem Problem. Soweit ich das beurteilen kann, gibt es keine Unterstützung für einen Nulldatenpunkt. Sie müssen für jede sequentielle xAxis einen Wert haben, oder Sie müssen selbst herausfinden, wie Sie sie überspringen können. Ich konnte herausfinden, wie das geht, und es funktioniert irgendwie, aber es fällt auseinander, wenn Sie nicht genügend Datenpunkte haben, um das Ansichtsfenster zu füllen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen