Search code examples
iosswiftios-charts

iOS Chart library why my Bar/PieChart function has only "dataset" but no "xVals"


I am using Daniel's IOS Chart framework and Xcode7.3.1. I went through basic tutorial and tried to set up first example.

Problem is I cannot assign X-axis string label

I see in tutorial when we assign data to chart, we should use

let chartData = BarChartData(xVals: dataPoints, dataSet: chartDataSet)

to complete last step, but below is what I am seeing here.

There is no parameter as "xVals" but only "dataset" is available.

Does anybody have idea? enter image description here

The result would be just barchart without any xaxis label as below enter image description here


Solution

  • Ok so here is example function for line chart:

      func setLineChart(dataPoints: [Double], chartInfo: String, chartDescription: String) {
    
        let formatter:ChartFormatter = ChartFormatter()
        let xaxis:XAxis = XAxis()
    
        var dataEntries: [ChartDataEntry] = Array()
    
        for i in 0..<dataPoints.count {
            let dataEntry = ChartDataEntry(x: Double(i), y: dataPoints[i])
            dataEntries.append(dataEntry)
            formatter.stringForValue(Double(i), axis: xaxis)
        }
    
        let lineChartDataSet = LineChartDataSet(values: dataEntries, label: chartInfo)
        let lineChartData = LineChartData(dataSet: lineChartDataSet)
    
        xaxis.valueFormatter = formatter
        lineChartView.xAxis.valueFormatter = xaxis.valueFormatter
    
        lineChartDataSet.mode = .CubicBezier
        lineChartDataSet.drawCirclesEnabled = false
    
        lineChartView.descriptionText = chartDescription
        lineChartView.data = lineChartData
        }
    

    Here is formatter:

        @objc(ChartFormatter)
        public class ChartFormatter: NSObject, IAxisValueFormatter{
    
           var days: [String] = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
    
           public func stringForValue(value: Double, axis: AxisBase?) -> String{
           return days[Int(value)]
    }
    }
    

    And finally a call of function:

      override func viewDidLoad() {
        super.viewDidLoad()
    
           let values: [Double] = [1.0, 4.0, 1.5, 1.4, 1.3, 1.0, 3.0]
           let chartInfo = "chart info"
           let chartDescription = "chart description"
    
           self.setLineChart(values, chartInfo: chartInfo, chartDescription: chartDescription
    }
    

    so finally you will get something like this:

    chart