2017-09-11 5 views
0

J'ai créé un diagramme à barres groupé avec des valeurs assez simples. J'ai 5 étiquettes que je voudrais étaler le long des groupes xaxis et 3 barres pour coïncider avec chaque étiquette de xaxis.Cartes ios Les étiquettes xaxis ne sont pas alignées

Le graphique affiche maintenant 1 étiquette xaxis et 1 barre. (ils peuvent être hors cadre, c'est difficile à dire.) J'ai besoin de chaque cas à synchroniser avec le bon label msArrayAxis.

Voici le code:

var msArrayXAxis = ["0-20", "20-50", "50-100", "100-200", "<200"] 


barchartView.isUserInteractionEnabled = false 
    barchartView.noDataText = "You need to provide data for the chart." 
    barchartView.legend.enabled = false 
    barchartView.chartDescription?.text = "" 

    barchartView.xAxis.labelPosition = XAxis.LabelPosition.bottom 
    barchartView.xAxis.valueFormatter = IndexAxisValueFormatter(values: msArrayXAxis) 

    barchartView.xAxis.axisMinimum = 0 

    barchartView.xAxis.granularity = 2 
    barchartView.xAxis.setLabelCount(5, force: true) 

    barchartView.xAxis.spaceMin = 0.3 
    //  barchartView.extraBottomOffset = 1 
    barchartView.xAxis.labelWidth = 1 
    barchartView.xAxis.avoidFirstLastClippingEnabled = true 
    barchartView.rightAxis.drawGridLinesEnabled = false 
    barchartView.rightAxis.drawAxisLineEnabled = false 
    barchartView.rightAxis.drawLabelsEnabled = false 

func parsedArrayCount(case1: Array<Double>,case2: Array<Double>,case3: Array<Double>,case4: Array<Double>, case5: Array<Double>) -> [BarChartDataEntry] { 

    var dataEntries1: [BarChartDataEntry] = [] 

    NSLog("Parsing array count") 

    let dataEntry = BarChartDataEntry(x: Double(0), y:Double(case1.count)) 
    dataEntries1.append(dataEntry) 

    let dataEntry2 = BarChartDataEntry(x: Double(1), y:Double(case2.count)) 
    dataEntries1.append(dataEntry2) 

    let dataEntry3 = BarChartDataEntry(x: Double(2), y:Double(case3.count)) 
    dataEntries1.append(dataEntry3) 

    let dataEntry4 = BarChartDataEntry(x: Double(3), y:Double(case4.count)) 
    dataEntries1.append(dataEntry4) 

    let dataEntry5 = BarChartDataEntry(x: Double(1), y:Double(case5.count)) 
    dataEntries1.append(dataEntry5) 

    return dataEntries1 
} 

func updateGraph(array: Array<name>?) { 

    var dataEntries1: [BarChartDataEntry] = [] 
    var dataEntries2: [BarChartDataEntry] = [] 
    var dataEntries3: [BarChartDataEntry] = [] 

    barchartView.clear() 
    rArray.removeAll() 
    nameArray.removeAll() 

    if array != nil && array!.count > 0 { 

     for i in 0..<array!.count { 
      rArray.append(array![i].r) 
      nameArray.append(array![i].name) 
     } 

     NSLog("updating graph..") 

     let name = Analyzer.sharedInstance.nameArray(names: rArray.map{String($0)}, Name: nameArray) 

     let cData = parserArrays(rArray: name.first.map {Double($0)!}) 
     let wData = parserArrays(rArray: name.last.map {Double($0)!}) 
     let vData = parserArrays(rArray: name.middle.map {Double($0)!}) 

     dataEntries1 = parsedArrayCount(case1: cData.case1, case2: cData.case2, case3: cData.case3, case4: cData.case4, case5: cData.case5) 
     dataEntries2 = parsedArrayCount(case1: wData.case1, case2: wData.case2, case3: wData.case3, case4: wData.case4, case5: wData.case5) 
     dataEntries3 = parsedArrayCount(case1: vData.case1, case2: vData.case2, case3: vData.case3, case4: vData.case4, case5: vData.case5) 

     let chartDataSet = BarChartDataSet(values: dataEntries1, label: "") 
     chartDataSet.colors = [UIColor.Blue()] 

     let chartDataSet1 = BarChartDataSet(values: dataEntries2, label: "") 
     chartDataSet1.colors = [UIColor.Green()] 

     let chartDataSet2 = BarChartDataSet(values: dataEntries3, label: "") 
     chartDataSet2.colors = [UIColor.Orange()] 

     NSLog("Data set1 \(dataEntries1)") 

     let groupSpace = 1.0 
     let barSpace = 0.05 
     let barWidth = 0.1 

     /* let xAxis = XAxis() 
     xAxis.valueFormatter = self 
     xAxis.drawGridLinesEnabled = true 
     xAxis.labelPosition = .bottom 
     xAxis.centerAxisLabelsEnabled = true 
     barchartView.xAxis.valueFormatter = xAxis.valueFormatter*/ 

     let dataSets: [BarChartDataSet] = [chartDataSet,chartDataSet1] 
     let chartData = BarChartData(dataSets: dataSets) 
     chartData.setDrawValues(false) 
     chartData.barWidth = barWidth 
     chartData.groupBars(fromX:0.3, groupSpace: groupSpace, barSpace: barSpace) 
     // let gg = chartData.groupWidth(groupSpace: groupSpace, barSpace: barSpace) 
     // barchartView.xAxis.axisMaximum = Double(0) + gg * Double(msArrayXAxis.count) 

     barchartView.data = chartData 
     barchartView.animate(yAxisDuration: 0.5) 
    } 
} 

Répondre

0

S'il vous plaît vérifier:

var msArrayXAxis = ["0-20", "20-50", "50-100", "100-200", "<200"] 
barChartView.isUserInteractionEnabled = false 
barChartView.noDataText = "You need to provide data for the chart." 
barChartView.legend.enabled = false 
barChartView.chartDescription?.text = "" 

barChartView.xAxis.labelPosition = XAxis.LabelPosition.bottom 
barChartView.xAxis.valueFormatter = IndexAxisValueFormatter(values: msArrayXAxis) 

barChartView.xAxis.axisMinimum = 0 
barChartView.xAxis.granularity = 1 
barChartView.xAxis.labelCount = msArrayXAxis.count 
barChartView.xAxis.centerAxisLabelsEnabled = true 

barChartView.xAxis.spaceMin = 0.3 
barChartView.xAxis.labelWidth = 1 
barChartView.rightAxis.drawGridLinesEnabled = false 
barChartView.rightAxis.drawAxisLineEnabled = false 
barChartView.rightAxis.drawLabelsEnabled = false 

func parsedArrayCount(case1: Array<Double>,case2: Array<Double>,case3: Array<Double>,case4: Array<Double>, case5: Array<Double>) -> [BarChartDataEntry] { 
    var dataEntries1: [BarChartDataEntry] = [] 

    NSLog("Parsing array count") 

    let dataEntry = BarChartDataEntry(x: Double(0), y:Double(case1.count)) 
    dataEntries1.append(dataEntry) 

    let dataEntry2 = BarChartDataEntry(x: Double(1), y:Double(case2.count)) 
    dataEntries1.append(dataEntry2) 

    let dataEntry3 = BarChartDataEntry(x: Double(2), y:Double(case3.count)) 
    dataEntries1.append(dataEntry3) 

    let dataEntry4 = BarChartDataEntry(x: Double(3), y:Double(case4.count)) 
    dataEntries1.append(dataEntry4) 

    let dataEntry5 = BarChartDataEntry(x: Double(1), y:Double(case5.count)) 
    dataEntries1.append(dataEntry5) 

    return dataEntries1 
} 

func updateGraph() { 
    var dataEntries1: [BarChartDataEntry] = [] 
    var dataEntries2: [BarChartDataEntry] = [] 
    var dataEntries3: [BarChartDataEntry] = [] 

    barChartView.clear() 
    NSLog("updating graph..") 

    let name = Analyzer.sharedInstance.nameArray(names: rArray.map{String($0)}, Name: nameArray) 

    let cData = parserArrays(rArray: name.first.map {Double($0)!}) 
    let wData = parserArrays(rArray: name.last.map {Double($0)!}) 
    let vData = parserArrays(rArray: name.middle.map {Double($0)!}) 

    dataEntries1 = parsedArrayCount(case1: cData.case1, case2: cData.case2, case3: cData.case3, case4: cData.case4, case5: cData.case5) 
    dataEntries2 = parsedArrayCount(case1: wData.case1, case2: wData.case2, case3: wData.case3, case4: wData.case4, case5: wData.case5) 
    dataEntries3 = parsedArrayCount(case1: vData.case1, case2: vData.case2, case3: vData.case3, case4: vData.case4, case5: vData.case5) 

    let chartDataSet = BarChartDataSet(values: dataEntries1, label: "") 
    chartDataSet.colors = [UIColor.blue] 

    let chartDataSet1 = BarChartDataSet(values: dataEntries2, label: "") 
    chartDataSet1.colors = [UIColor.green] 

    let chartDataSet2 = BarChartDataSet(values: dataEntries3, label: "") 
    chartDataSet2.colors = [UIColor.orange] 

    NSLog("Data set1 \(dataEntries1)") 

    let groupSpace = 0.1 
    let barSpace = 0.05 
    let barWidth = 0.25 

    let dataSets: [BarChartDataSet] = [chartDataSet,chartDataSet1, chartDataSet2] 
    let chartData = BarChartData(dataSets: dataSets) 
    chartData.setDrawValues(false) 
    chartData.barWidth = barWidth 

    let gg = chartData.groupWidth(groupSpace: groupSpace, barSpace: barSpace) 
    barChartView.xAxis.axisMaximum = Double(0) + gg * Double(msArrayXAxis.count) 
    chartData.groupBars(fromX:0.0, groupSpace: groupSpace, barSpace: barSpace) 
    barChartView.notifyDataSetChanged() 
    barChartView.data = chartData 
    barChartView.animate(yAxisDuration: 0.5) 
}