11

chart, here is my code:

private func setChart(pieChartView: PieChartView, values: [Double]) {

    var dataEntries: [PieChartDataEntry] = []

    let dataPoints = ["Mar","Apr","May"]

    for i in 0..<dataPoints.count {
        let dataEntry = PieChartDataEntry(value: values[i], label: dataPoints[i])
        dataEntries.append(dataEntry)
    }

    let pieChartDataSet = PieChartDataSet(values: dataEntries, label: "")
    pieChartDataSet.colors = [UIColor(red: 47/255, green: 164/255, blue: 59/255, alpha: 1.0),UIColor(red: 17/255, green: 128/255, blue: 127/255, alpha: 1.0),UIColor.orange]
    let pieChartData = PieChartData(dataSet: pieChartDataSet)
    pieChartView.data = pieChartData
    pieChartView.centerText = "Amount Spent"
    pieChartView.chartDescription?.text = ""
    pieChartView.usePercentValuesEnabled = true
    pieChartView.legend.horizontalAlignment = .center

}

enter image description here

How to add "%" in PieChart data ? NSNumberFormatter() is no longer available

---------------SOLUTION---------------

I post this solution for everyone who have same problem. I got it from chart-ios githup :

private func setChart(pieChartView: PieChartView, values: [Double]) {

    var dataEntries = [ChartDataEntry]()

    let dataPoints = ["Mar","Apr","May"]

    for i in 0..<dataPoints.count {
        let dataEntry = PieChartDataEntry(value: values[i], label: dataPoints[i])
        dataEntries.append(dataEntry)
    }

    let pieChartDataSet = PieChartDataSet(values: dataEntries, label: "")
    let green = UIColor(red: 47/255, green: 164/255, blue: 59/255, alpha: 1.0)
    let blue = UIColor(red: 17/255, green: 128/255, blue: 127/255, alpha: 1.0)
    pieChartDataSet.colors = [green, blue, .orange]
    let pieChartData = PieChartData(dataSet: pieChartDataSet)
    let formatter = NumberFormatter()
    formatter.numberStyle = .percent
    formatter.maximumFractionDigits = 2
    formatter.multiplier = 1.0
    formatter.percentSymbol = "%"
    pieChartData.setValueFormatter(DefaultValueFormatter(formatter: formatter))
    pieChartView.data = pieChartData
    pieChartView.centerText = "Amount Spent"
    pieChartView.chartDescription?.text = ""
    pieChartView.usePercentValuesEnabled = true
    pieChartView.legend.horizontalAlignment = .center
    pieChartView.drawEntryLabelsEnabled = false
    pieChartView.holeRadiusPercent = 0.55
    pieChartView.highlightPerTapEnabled = false
    pieChartView.animate(yAxisDuration: 2.0, easingOption: .easeInBack)
}
OuSS
  • 1,047
  • 1
  • 15
  • 23

2 Answers2

4

if you want to add % in in your graph as well as hide/remove 0.0 values from graph : # Swift 3 used below lines of code:-

   func updateChartData()  {

        let chart = PieChartView(frame: mViewOutlet.frame)
//         let chart = PieChartView(frame: CGRect(x: 122, y: 235 , width: self.mViewOutlet.frame.size.width, height: self.mViewOutlet.frame.size.height))


        // 2. generate chart data entries
        let track = ["Present","Leave", "EG/LC", "Halfday", "Absent", "Weeklyoff", "Holidays"]
        //        let money = [65, 13, 10, 2]
        let money = mDaysArray

        var entries = [PieChartDataEntry]()
        for (index, value) in money.enumerated() {
            print("index: \(index) \n value: \(value)")
            let entry = PieChartDataEntry()

            if value != 0 {
                 entry.y = Double(value)
            }else{

            }
            entries.append(entry)
//            entry.label = track[index]  // if we want to remove name label
        }

        // 3. chart setup
        let set = PieChartDataSet( values: entries, label: "Pie Chart")
        // this is custom extension method. Download the code for more details.

        //4. set chart color
        let presentColor = UIColor(red: 80.0/255.0, green: 180.0/255.0, blue: 50.0/255.0, alpha: 1.0)
        //        let lateColor = UIColor(red: 241.0/255.0, green: 194.0/255.0, blue: 114.0/255.0, alpha: 1.0)
        let leaveColor = UIColor(red: 203.0/255.0, green: 68.0/255.0, blue: 242.0/255.0, alpha: 1.0)
        let egColor = UIColor(red: 95.0/255.0, green: 180.0/255.0, blue: 239.0/255.0, alpha: 1.0)
        let halfdayColor = UIColor(red: 82.0/255.0, green: 64.0/255.0, blue: 152.0/255.0, alpha: 1.0)
        let absentColor = UIColor(red: 242.0/255.0, green: 58.0/255.0, blue: 02.0/255.0, alpha: 1.0)
        let weekOffColor = UIColor(red: 186.0/255.0, green: 221.0/255.0, blue: 79.0/255.0, alpha: 1.0)
        let holidayColor = UIColor(red: 35.0/255.0, green: 215.0/255.0, blue: 179.0/255.0, alpha: 1.0)

        let colors: [UIColor] = [presentColor,leaveColor,egColor,halfdayColor,absentColor,weekOffColor,holidayColor]

        set.colors = colors
        let data = PieChartData(dataSet: set)

        let formatter = NumberFormatter()
        formatter.numberStyle = .percent
        formatter.maximumFractionDigits = 2
        formatter.multiplier = 1.0
        formatter.percentSymbol = "%"
        formatter.zeroSymbol = ""
        data.setValueFormatter(DefaultValueFormatter(formatter: formatter))

        chart.data = data
        chart.noDataText = "No data available"
         chart.usePercentValuesEnabled = true
        // user interaction
        chart.isUserInteractionEnabled = false

        let d = Description()
//        d.text = "iOSCharts.io"
        chart.chartDescription = d
//        chart.tintColor = UIColor.black
//        chart.centerText = "Pie Chart"

        chart.holeRadiusPercent = 0.2
        chart.chartDescription?.enabled = false
        chart.legend.enabled = false

        chart.data?.notifyDataChanged()
        chart.notifyDataSetChanged()
        chart.setNeedsDisplay()
        chart.animate(xAxisDuration: 1.3, yAxisDuration: 1.3)

        chart.transparentCircleColor = UIColor.clear
//        self.view.addSubview(chart)
        self.mPieChartMainView.addSubview(chart)
    }
Kiran Jadhav
  • 3,209
  • 26
  • 29
3

enter image description here

Please refer below code, i have added %.

import UIKit

class ViewController: UIViewController {

    
        @IBOutlet weak var pieChartView: PieChartView!
        override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
        let unitsSold = [20.0, 4.0, 6.0, 3.0, 12.0, 16.0]
        
        setChart(months, values: unitsSold)
            
    
            
        
    }

    
    func setChart(dataPoints: [String], values: [Double]) {
        
        var dataEntries: [ChartDataEntry] = []
        
        for i in 0..<dataPoints.count {
            let dataEntry = ChartDataEntry(value: values[i], xIndex: i)
            dataEntries.append(dataEntry)
        }
        
        let pieChartDataSet = PieChartDataSet(yVals: dataEntries, label: "Units Sold")
        
        let formatter = NSNumberFormatter()
        formatter.numberStyle = .PercentStyle
        formatter.maximumFractionDigits = 1
        formatter.multiplier = 1.0
      
        
        let pieChartData = PieChartData(xVals: dataPoints, dataSet: pieChartDataSet)

        pieChartData.dataSet?.valueFormatter = formatter
        
        
        pieChartView.data = pieChartData
       
        pieChartView.holeColor = UIColor.clearColor()
      
      //  pieChartView.holeRadiusPercent = 0.95
        
        pieChartView.centerText =  "Hello\nThis is Pie chart"

 pieChartView.usePercentValuesEnabled = true
        
        
        var colors: [UIColor] = []
        
        for i in 0..<dataPoints.count {
            let red = Double(arc4random_uniform(255))
            let green = Double(arc4random_uniform(255))
            let blue = Double(arc4random_uniform(255))
            
            let color = UIColor(red: CGFloat(red/255), green: CGFloat(green/255), blue: CGFloat(blue/255), alpha: 1)
            colors.append(color)
        }
        
        pieChartDataSet.colors = colors
        
        
        
        
    }


    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

   
}
Nimantha
  • 6,405
  • 6
  • 28
  • 69
Hasya
  • 9,792
  • 4
  • 31
  • 46
  • pieChartData.dataSet?.valueFormatter = formatter is show an error due to internal protection level how to manage it? – Umesh Verma Jan 02 '17 at 07:32
  • You may have downloaded recently from Git, it will be in swift 3.0, above example and code is in swift 2.2, So just check with library how to do it in swift 3.0. Check http://stackoverflow.com/questions/37965016/how-to-show-percentage-sign-in-pie-chart-using-daniel-gindi-chart-library-in-swi/38101191#38101191 – Hasya Jan 02 '17 at 07:39