2016-11-06 72 views
5

圖,這裏是我的代碼:如何 「%」 添加到IOS-圖表數據

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

如何在餅圖數據添加 「%」? NSNumberFormatter()不再可用

---------------解決方案---------------

我針對所有遇到同樣問題的人發佈此解決方案。 我是從圖表-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) 
} 
+0

它是否有效? – Hasya

+0

不,但我更新了正確的文章 – OuSS

+0

你可以回答你自己的問題。如果您標記爲問題並回答將發佈問題。 – Hasya

回答

2

enter image description here

請參考下面的代碼,我已經添加%。

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


} 

讓我知道,如果我可以幫你。

祝您編程愉快。

如果你想在你的圖形添加%以及隱藏/從圖中刪除0.0值
+0

pieChartData.dataSet?.valueFormatter = formatter由於內部保護級別而顯示錯誤如何管理它? –

+0

你可能已經從Git最近下載過,它會在swift 3.0中,上面的例子和代碼是在swift 2.2中,所以只需在庫中檢查如何在swift 3.0中做到這一點。檢查http://stackoverflow.com/questions/37965016/how-to-show-percentage-sign-in-pie-chart-using-daniel-gindi-chart-library-in-swi/38101191#38101191 – Hasya

1

:#斯威夫特3 下面的代碼行中: -

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