PositiveNegativeBarChartViewController.swift 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. //
  2. // PositiveNegativeBarChartViewController.swift
  3. // ChartsDemo-iOS
  4. //
  5. // Created by Jacob Christie on 2017-07-09.
  6. // Copyright © 2017 jc. All rights reserved.
  7. //
  8. #if canImport(UIKit)
  9. import UIKit
  10. #endif
  11. import Charts
  12. class PositiveNegativeBarChartViewController: DemoBaseViewController {
  13. @IBOutlet var chartView: BarChartView!
  14. let dataLabels = ["12-19",
  15. "12-30",
  16. "12-31",
  17. "01-01",
  18. "01-02"]
  19. override func viewDidLoad() {
  20. super.viewDidLoad()
  21. // Do any additional setup after loading the view.
  22. self.title = "Positive/Negative Bar Chart"
  23. self.options = [.toggleValues,
  24. .toggleHighlight,
  25. .animateX,
  26. .animateY,
  27. .animateXY,
  28. .saveToGallery,
  29. .togglePinchZoom,
  30. .toggleAutoScaleMinMax,
  31. .toggleData,
  32. .toggleBarBorders]
  33. self.setup(barLineChartView: chartView)
  34. chartView.delegate = self
  35. chartView.setExtraOffsets(left: 70, top: -30, right: 70, bottom: 10)
  36. chartView.drawBarShadowEnabled = false
  37. chartView.drawValueAboveBarEnabled = true
  38. chartView.chartDescription?.enabled = false
  39. chartView.rightAxis.enabled = false
  40. let xAxis = chartView.xAxis
  41. xAxis.labelPosition = .bottom
  42. xAxis.labelFont = .systemFont(ofSize: 13)
  43. xAxis.drawAxisLineEnabled = false
  44. xAxis.labelTextColor = .lightGray
  45. xAxis.labelCount = 5
  46. xAxis.centerAxisLabelsEnabled = true
  47. xAxis.granularity = 1
  48. xAxis.valueFormatter = self
  49. let leftAxis = chartView.leftAxis
  50. leftAxis.drawLabelsEnabled = false
  51. leftAxis.spaceTop = 0.25
  52. leftAxis.spaceBottom = 0.25
  53. leftAxis.drawAxisLineEnabled = false
  54. leftAxis.drawZeroLineEnabled = true
  55. leftAxis.zeroLineColor = .gray
  56. leftAxis.zeroLineWidth = 0.7
  57. self.updateChartData()
  58. }
  59. override func updateChartData() {
  60. if self.shouldHideData {
  61. chartView.data = nil
  62. return
  63. }
  64. self.setChartData()
  65. }
  66. func setChartData() {
  67. let yVals = [BarChartDataEntry(x: 0, y: -224.1),
  68. BarChartDataEntry(x: 1, y: 238.5),
  69. BarChartDataEntry(x: 2, y: 1280.1),
  70. BarChartDataEntry(x: 3, y: -442.3),
  71. BarChartDataEntry(x: 4, y: -2280.1)
  72. ]
  73. let red = UIColor(red: 211/255, green: 74/255, blue: 88/255, alpha: 1)
  74. let green = UIColor(red: 110/255, green: 190/255, blue: 102/255, alpha: 1)
  75. let colors = yVals.map { (entry) -> NSUIColor in
  76. return entry.y > 0 ? red : green
  77. }
  78. let set = BarChartDataSet(entries: yVals, label: "Values")
  79. set.colors = colors
  80. set.valueColors = colors
  81. let data = BarChartData(dataSet: set)
  82. data.setValueFont(.systemFont(ofSize: 13))
  83. let formatter = NumberFormatter()
  84. formatter.maximumFractionDigits = 1
  85. data.setValueFormatter(DefaultValueFormatter(formatter: formatter))
  86. data.barWidth = 0.8
  87. chartView.data = data
  88. }
  89. override func optionTapped(_ option: Option) {
  90. super.handleOption(option, forChartView: chartView)
  91. }
  92. }
  93. extension PositiveNegativeBarChartViewController: IAxisValueFormatter {
  94. func stringForValue(_ value: Double, axis: AxisBase?) -> String {
  95. return dataLabels[min(max(Int(value), 0), dataLabels.count - 1)]
  96. }
  97. }