2

I recently added "barChartData.groupBars(fromX: 0, groupSpace: 0.5, barSpace: 0.03)" to my Bar Chart so that I don't have overlapping bars and I can't figure it out how to set the width to fit (no horizontal overflow)

enter image description here

func setupGroupedBarChartData(values1: [String], values2: [String], barLabel1: String, barLabel2: String, barColor1: UIColor, barColor2: UIColor) -> BarChartData {
    let dataValues1 = values1.flatMap{ Double($0) }
    let dataValues2 = values2.flatMap{ Double($0) }

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

    for i in 0..<dataValues1.count {
        let dataEntry1 = BarChartDataEntry(x: Double(i), y: dataValues1[i])
        dataEntries1.append(dataEntry1)

        let dataEntry2 = BarChartDataEntry(x: Double(i), y: dataValues2[i])
        dataEntries2.append(dataEntry2)
    }

    let chartDataSet1 = BarChartDataSet(values: dataEntries1, label: barLabel1)
    chartDataSet1.colors = [barColor1]
    chartDataSet1.valueTextColor = AppColors.lightText
    let chartDataSet2 = BarChartDataSet(values: dataEntries2, label: barLabel2)
    chartDataSet2.colors = [barColor2]
    chartDataSet2.valueTextColor = AppColors.lightText

    var groupedDataSet : [BarChartDataSet] = [BarChartDataSet]()
    groupedDataSet.append(chartDataSet1)
    groupedDataSet.append(chartDataSet2)

    let barChartData = BarChartData(dataSets: groupedDataSet)
    barChartData.groupBars(fromX: 0, groupSpace: 0.5, barSpace: 0.03)

    //display data as integer
    let format = NumberFormatter()
    format.generatesDecimalNumbers = false
    let formatter = DefaultValueFormatter(formatter: format)
    barChartData.setValueFormatter(formatter)


    return barChartData
}
Robert Varga
  • 477
  • 1
  • 7
  • 15
  • Hi Robert, which library are you using? I'm trying to implement something similar. Thank you. – Ning Dec 27 '17 at 01:00

1 Answers1

3

You can use like this :

You calculation will be like below :

// (barWidth + barSpace) * (no.of.bars) + groupSpace = 1.00 -> interval per "group"

In your code :

barChartData.groupBars(fromX: 0, groupSpace: 0.14, barSpace: 0.03)
barChartData.barWidth = 0.4

barChartView.xAxis.axisMinimum = 0
barChartView.xAxis.axisMaximum = 23
Vini App
  • 7,339
  • 2
  • 26
  • 43
  • thanks for the answer. I think I'm on the right direction. Take a look at my screenshot. I am supposed to have 12 groups (instead of 6) starting from 0 (the left edge). https://imgur.com/ijNazSU – Robert Varga Oct 08 '17 at 12:54
  • 1
    I actually manage to tweak the value until it worked. Really odd... https://imgur.com/a/bdyaI barChartData.groupBars(fromX: -0.5, groupSpace: 0.13, barSpace: -0.415) barChartData.barWidth = 0.41 – Robert Varga Oct 09 '17 at 20:46