Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add "%" to data in ios-chart

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)
}
like image 802
OuSS Avatar asked Nov 06 '16 19:11

OuSS


2 Answers

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)
    }
like image 76
Kiran Jadhav Avatar answered Sep 20 '22 23:09

Kiran Jadhav


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

   
}
like image 38
Hasya Avatar answered Sep 20 '22 23:09

Hasya