swift - ios-charts xaxis 标签未对齐

标签 swift ios-charts

我创建了一个包含非常简单值的分组条形图。我有 5 个标签,我希望它们沿着 x 轴展开,并有 3 个条组与每个 x 轴标签一致。

现在的图表显示 1 个 x 轴标签和 1 个条形图。 (它们可能超出框架,很难说。)我需要每个案例与正确的 msArrayAxis 标签同步。

代码如下:

 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)
    }
}

最佳答案

请检查:

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)
}

关于swift - ios-charts xaxis 标签未对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46157829/

相关文章:

swift 3 :fatal error: Double value cannot be converted to Int because it is either infinite or NaN

ios - DanielGindi 图表,增加图表和图例之间的底部空间。 iOS swift

arrays - Swift 检查数组是否包含在另一个数组中

ios - 如何使用图表在 X 轴上显示每月(IOS)

swift - "One-sided form"的 "half-open range operator"

swift - 在 Swift 2/3 中对称地设置 LineDash

swift - 通过 super.validateMenuItem( :) generates Swift exception

ios - 当我将 Charts UIView 作为 IBOutlet 添加到 ViewController 时,应用程序崩溃

ios - 在Objective-C中将图表与 Realm 一起使用

iOS Swift 2.0 - AvAudioPlayer 没有播放任何声音