J'ai trouvé une question similaire sur ici, mais la réponse ne m'a pas aidé. Je pense en raison de ma structure de données.iOS Charts 3 - Aligner X étiquettes (dates) avec des parcelles
J'ai un tableau composé de tableaux individuels, chacun pour sa propre ligne dans le tableau. ceci est alors composé de plusieurs structs pour les points d'intrigue de cette ligne.
Mon problème est que les valeurs/lignes sont correctes, mais ne s'alignent pas correctement avec les dates. Dans l'exemple ci-dessous. les dates commencent le 3 mai et finissent le 8 mai. S'il vous plaît aider
ici est mon 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)
}
}
est-ce pas la même chose que (= laisser xaxis testLineChartView.xAxis xaxis.valueFormatter = axisFormatDelegate)? – ThundercatChris
J'ai mis à jour mon code pour montrer quel est l'ensemble. il s'agit essentiellement d'un tableau avec des tableaux de points de l'intrigue, constitués de tableaux de structures. De cette façon, une ligne peut avoir plusieurs points de tracé à l'intérieur d'un tableau et une autre ligne peut avoir ses propres points. J'espère que cela a du sens – ThundercatChris
J'ai également essayé d'utiliser un tableau de chaînes de date (je pense que c'est ce que vous avez suggéré), mais encore une fois, ils sont mal alignés. Je ne pense pas que les cordes sont le problème. c'est le décalage – ThundercatChris