123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- //
- // PositiveNegativeBarChartViewController.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 PositiveNegativeBarChartViewController: DemoBaseViewController {
- @IBOutlet var chartView: BarChartView!
- let dataLabels = ["12-19",
- "12-30",
- "12-31",
- "01-01",
- "01-02"]
-
- override func viewDidLoad() {
- super.viewDidLoad()
-
- // Do any additional setup after loading the view.
- self.title = "Positive/Negative Bar Chart"
- self.options = [.toggleValues,
- .toggleHighlight,
- .animateX,
- .animateY,
- .animateXY,
- .saveToGallery,
- .togglePinchZoom,
- .toggleAutoScaleMinMax,
- .toggleData,
- .toggleBarBorders]
-
- self.setup(barLineChartView: chartView)
-
- chartView.delegate = self
-
- chartView.setExtraOffsets(left: 70, top: -30, right: 70, bottom: 10)
-
- chartView.drawBarShadowEnabled = false
- chartView.drawValueAboveBarEnabled = true
-
- chartView.chartDescription.enabled = false
-
- chartView.rightAxis.enabled = false
- let xAxis = chartView.xAxis
- xAxis.labelPosition = .bottom
- xAxis.labelFont = .systemFont(ofSize: 13)
- xAxis.drawAxisLineEnabled = false
- xAxis.labelTextColor = .lightGray
- xAxis.labelCount = 5
- xAxis.centerAxisLabelsEnabled = true
- xAxis.granularity = 1
- xAxis.valueFormatter = self
-
- let leftAxis = chartView.leftAxis
- leftAxis.drawLabelsEnabled = false
- leftAxis.spaceTop = 0.25
- leftAxis.spaceBottom = 0.25
- leftAxis.drawAxisLineEnabled = false
- leftAxis.drawZeroLineEnabled = true
- leftAxis.zeroLineColor = .gray
- leftAxis.zeroLineWidth = 0.7
-
- self.updateChartData()
- }
-
- override func updateChartData() {
- if self.shouldHideData {
- chartView.data = nil
- return
- }
-
- self.setChartData()
- }
-
- func setChartData() {
- let yVals = [BarChartDataEntry(x: 0, y: -224.1),
- BarChartDataEntry(x: 1, y: 238.5),
- BarChartDataEntry(x: 2, y: 1280.1),
- BarChartDataEntry(x: 3, y: -442.3),
- BarChartDataEntry(x: 4, y: -2280.1)
- ]
-
- let red = UIColor(red: 211/255, green: 74/255, blue: 88/255, alpha: 1)
- let green = UIColor(red: 110/255, green: 190/255, blue: 102/255, alpha: 1)
- let colors = yVals.map { (entry) -> NSUIColor in
- return entry.y > 0 ? red : green
- }
-
- let set = BarChartDataSet(entries: yVals, label: "Values")
- set.colors = colors
- set.valueColors = colors
-
- let data = BarChartData(dataSet: set)
- data.setValueFont(.systemFont(ofSize: 13))
-
- let formatter = NumberFormatter()
- formatter.maximumFractionDigits = 1
- data.setValueFormatter(DefaultValueFormatter(formatter: formatter))
- data.barWidth = 0.8
-
- chartView.data = data
- }
-
- override func optionTapped(_ option: Option) {
- super.handleOption(option, forChartView: chartView)
- }
- }
- extension PositiveNegativeBarChartViewController: AxisValueFormatter {
- func stringForValue(_ value: Double, axis: AxisBase?) -> String {
- return dataLabels[min(max(Int(value), 0), dataLabels.count - 1)]
- }
- }
|