Search code examples
swiftchartsswift3ios-charts

iOS Charts Bar-Bar Combined-Charts


I'm using iOS charts library and trying to do a bar-bar combined chart.

I'm not sure this is possible but i did not see any limitation regarding on the documentation so i'm assuming there such an option.

This is the code i'm using to add the combined chart:

func createIntegratedChartForStat(stat:String, chart:CombinedChartView){
    chart.noDataText = "You need to provide data for the " + stat + " chart"

    var dataEntriesTotal: [BarChartDataEntry] = []
    var dataEntriesGood: [BarChartDataEntry] = []
    for i in 0..<gamesOrder.count {
        let outFromStat = playersFullData["b"]![stat]![i]
        var splittedData = outFromStat.split(separator: "/")
        let dataEntryTotal = BarChartDataEntry(x: Double(i), y: Double(splittedData[0])!)
        let dataEntryGood = BarChartDataEntry(x: Double(i), y: Double(splittedData[1])!)
        dataEntriesTotal.append(dataEntryTotal)
        dataEntriesGood.append(dataEntryGood)
    }

    let chartDataSetTotal = BarChartDataSet(values: dataEntriesTotal, label: stat + " Attempts")
    let chartDataSetGood = BarChartDataSet(values: dataEntriesGood, label: stat + " Successful")

    let chartData = CombinedChartData(dataSets: [chartDataSetTotal, chartDataSetGood])

    chart.data = chartData
}

All i'm getting is this:

enter image description here

And the following error if i touch the chart:

[Unknown process name] CGAffineTransformInvert: singular matrix.

Can this be done or am i missing something?


Solution

  • It is possible, i just added the data to the combined chart in wrong. Adding the updated code:

    func createIntegratedChartForStat(stat:String, chart:CombinedChartView){
        chart.noDataText = "You need to provide data for the " + stat + " chart"
    
        var dataEntriesTotal: [BarChartDataEntry] = []
        var dataEntriesGood: [BarChartDataEntry] = []
        for i in 0..<gamesOrder.count {
            let outFromStat = playersFullData["b"]![stat]![i]
            var splittedData = outFromStat.split(separator: "/")
            let dataEntryTotal = BarChartDataEntry(x: Double(i), y: Double(splittedData[0])!)
            let dataEntryGood = BarChartDataEntry(x: Double(i), y: Double(splittedData[1])!)
            dataEntriesTotal.append(dataEntryTotal)
            dataEntriesGood.append(dataEntryGood)
        }
    
        let chartDataSetTotal = BarChartDataSet(values: dataEntriesTotal, label: stat + " Attempts")
        chartDataSetTotal.colors = [NSUIColor .blue]
        let chartDataSetGood = BarChartDataSet(values: dataEntriesGood, label: stat + " Successful")
        chartDataSetGood.colors = [NSUIColor .green]
    
        let chartData = BarChartData(dataSets: [chartDataSetTotal, chartDataSetGood])
    
        let data: CombinedChartData = CombinedChartData()
        data.barData = chartData
        chart.data = data
    }