ScatterChartViewController.swift 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. //
  2. // ScatterChartViewController.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 ScatterChartViewController: DemoBaseViewController {
  13. @IBOutlet var chartView: ScatterChartView!
  14. @IBOutlet var sliderX: UISlider!
  15. @IBOutlet var sliderY: UISlider!
  16. @IBOutlet var sliderTextX: UITextField!
  17. @IBOutlet var sliderTextY: UITextField!
  18. override func viewDidLoad() {
  19. super.viewDidLoad()
  20. // Do any additional setup after loading the view.
  21. self.title = "Scatter Chart"
  22. self.options = [.toggleValues,
  23. .toggleHighlight,
  24. .animateX,
  25. .animateY,
  26. .animateXY,
  27. .saveToGallery,
  28. .togglePinchZoom,
  29. .toggleAutoScaleMinMax,
  30. .toggleData]
  31. chartView.delegate = self
  32. chartView.chartDescription.enabled = false
  33. chartView.dragEnabled = true
  34. chartView.setScaleEnabled(true)
  35. chartView.maxVisibleCount = 200
  36. chartView.pinchZoomEnabled = true
  37. let l = chartView.legend
  38. l.horizontalAlignment = .right
  39. l.verticalAlignment = .top
  40. l.orientation = .vertical
  41. l.drawInside = false
  42. l.font = .systemFont(ofSize: 10, weight: .light)
  43. l.xOffset = 5
  44. let leftAxis = chartView.leftAxis
  45. leftAxis.labelFont = .systemFont(ofSize: 10, weight: .light)
  46. leftAxis.axisMinimum = 0
  47. chartView.rightAxis.enabled = false
  48. let xAxis = chartView.xAxis
  49. xAxis.labelFont = .systemFont(ofSize: 10, weight: .light)
  50. sliderX.value = 45
  51. sliderY.value = 100
  52. slidersValueChanged(nil)
  53. }
  54. override func updateChartData() {
  55. if self.shouldHideData {
  56. chartView.data = nil
  57. return
  58. }
  59. self.setDataCount(Int(sliderX.value + 1), range: UInt32(sliderY.value))
  60. }
  61. func setDataCount(_ count: Int, range: UInt32) {
  62. let values1 = (0..<count).map { (i) -> ChartDataEntry in
  63. let val = Double(arc4random_uniform(range) + 3)
  64. return ChartDataEntry(x: Double(i), y: val)
  65. }
  66. let values2 = (0..<count).map { (i) -> ChartDataEntry in
  67. let val = Double(arc4random_uniform(range) + 3)
  68. return ChartDataEntry(x: Double(i) + 0.33, y: val)
  69. }
  70. let values3 = (0..<count).map { (i) -> ChartDataEntry in
  71. let val = Double(arc4random_uniform(range) + 3)
  72. return ChartDataEntry(x: Double(i) + 0.66, y: val)
  73. }
  74. let set1 = ScatterChartDataSet(entries: values1, label: "DS 1")
  75. set1.setScatterShape(.square)
  76. set1.setColor(ChartColorTemplates.colorful()[0])
  77. set1.scatterShapeSize = 8
  78. let set2 = ScatterChartDataSet(entries: values2, label: "DS 2")
  79. set2.setScatterShape(.circle)
  80. set2.scatterShapeHoleColor = ChartColorTemplates.colorful()[3]
  81. set2.scatterShapeHoleRadius = 3.5
  82. set2.setColor(ChartColorTemplates.colorful()[1])
  83. set2.scatterShapeSize = 8
  84. let set3 = ScatterChartDataSet(entries: values3, label: "DS 3")
  85. set3.setScatterShape(.cross)
  86. set3.setColor(ChartColorTemplates.colorful()[2])
  87. set3.scatterShapeSize = 8
  88. let data: ScatterChartData = [set1, set2, set3]
  89. data.setValueFont(.systemFont(ofSize: 7, weight: .light))
  90. chartView.data = data
  91. }
  92. override func optionTapped(_ option: Option) {
  93. super.handleOption(option, forChartView: chartView)
  94. }
  95. @IBAction func slidersValueChanged(_ sender: Any?) {
  96. sliderTextX.text = "\(Int(sliderX.value))"
  97. sliderTextY.text = "\(Int(sliderY.value))"
  98. self.updateChartData()
  99. }
  100. }