123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- //
- // ScatterChartViewController.swift
- // ChartsDemo-iOS
- //
- // Created by Jacob Christie on 2017-07-09.
- // Copyright © 2017 jc. All rights reserved.
- //
- #if canImport(UIKit)
- import UIKit
- #endif
- import Charts
- class ScatterChartViewController: DemoBaseViewController {
-
- @IBOutlet var chartView: ScatterChartView!
- @IBOutlet var sliderX: UISlider!
- @IBOutlet var sliderY: UISlider!
- @IBOutlet var sliderTextX: UITextField!
- @IBOutlet var sliderTextY: UITextField!
-
- override func viewDidLoad() {
- super.viewDidLoad()
-
- // Do any additional setup after loading the view.
- self.title = "Scatter Chart"
- self.options = [.toggleValues,
- .toggleHighlight,
- .animateX,
- .animateY,
- .animateXY,
- .saveToGallery,
- .togglePinchZoom,
- .toggleAutoScaleMinMax,
- .toggleData]
-
- chartView.delegate = self
-
- chartView.chartDescription?.enabled = false
-
- chartView.dragEnabled = true
- chartView.setScaleEnabled(true)
- chartView.maxVisibleCount = 200
- chartView.pinchZoomEnabled = true
-
- let l = chartView.legend
- l.horizontalAlignment = .right
- l.verticalAlignment = .top
- l.orientation = .vertical
- l.drawInside = false
- l.font = .systemFont(ofSize: 10, weight: .light)
- l.xOffset = 5
-
- let leftAxis = chartView.leftAxis
- leftAxis.labelFont = .systemFont(ofSize: 10, weight: .light)
- leftAxis.axisMinimum = 0
-
- chartView.rightAxis.enabled = false
-
-
- let xAxis = chartView.xAxis
- xAxis.labelFont = .systemFont(ofSize: 10, weight: .light)
-
- sliderX.value = 45
- sliderY.value = 100
- slidersValueChanged(nil)
- }
-
- override func updateChartData() {
- if self.shouldHideData {
- chartView.data = nil
- return
- }
-
- self.setDataCount(Int(sliderX.value + 1), range: UInt32(sliderY.value))
- }
-
- func setDataCount(_ count: Int, range: UInt32) {
- let values1 = (0..<count).map { (i) -> ChartDataEntry in
- let val = Double(arc4random_uniform(range) + 3)
- return ChartDataEntry(x: Double(i), y: val)
- }
- let values2 = (0..<count).map { (i) -> ChartDataEntry in
- let val = Double(arc4random_uniform(range) + 3)
- return ChartDataEntry(x: Double(i) + 0.33, y: val)
- }
- let values3 = (0..<count).map { (i) -> ChartDataEntry in
- let val = Double(arc4random_uniform(range) + 3)
- return ChartDataEntry(x: Double(i) + 0.66, y: val)
- }
-
- let set1 = ScatterChartDataSet(entries: values1, label: "DS 1")
- set1.setScatterShape(.square)
- set1.setColor(ChartColorTemplates.colorful()[0])
- set1.scatterShapeSize = 8
-
- let set2 = ScatterChartDataSet(entries: values2, label: "DS 2")
- set2.setScatterShape(.circle)
- set2.scatterShapeHoleColor = ChartColorTemplates.colorful()[3]
- set2.scatterShapeHoleRadius = 3.5
- set2.setColor(ChartColorTemplates.colorful()[1])
- set2.scatterShapeSize = 8
-
- let set3 = ScatterChartDataSet(entries: values3, label: "DS 3")
- set3.setScatterShape(.cross)
- set3.setColor(ChartColorTemplates.colorful()[2])
- set3.scatterShapeSize = 8
-
- let data = ScatterChartData(dataSets: [set1, set2, set3])
- data.setValueFont(.systemFont(ofSize: 7, weight: .light))
- chartView.data = data
- }
-
- override func optionTapped(_ option: Option) {
- super.handleOption(option, forChartView: chartView)
- }
-
- @IBAction func slidersValueChanged(_ sender: Any?) {
- sliderTextX.text = "\(Int(sliderX.value))"
- sliderTextY.text = "\(Int(sliderY.value))"
-
- self.updateChartData()
- }
- }
|