123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- //
- // NegativeStackedBarChartViewController.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 NegativeStackedBarChartViewController: DemoBaseViewController {
- @IBOutlet var chartView: HorizontalBarChartView!
-
- lazy var customFormatter: NumberFormatter = {
- let formatter = NumberFormatter()
- formatter.negativePrefix = ""
- formatter.positiveSuffix = "m"
- formatter.negativeSuffix = "m"
- formatter.minimumSignificantDigits = 1
- formatter.minimumFractionDigits = 1
- return formatter
- }()
- override func viewDidLoad() {
- super.viewDidLoad()
-
- // Do any additional setup after loading the view.
- self.title = "Stacked Bar Chart Negative"
- self.options = [.toggleValues,
- .toggleIcons,
- .toggleHighlight,
- .animateX,
- .animateY,
- .animateXY,
- .saveToGallery,
- .togglePinchZoom,
- .toggleAutoScaleMinMax,
- .toggleData,
- .toggleBarBorders]
-
- chartView.delegate = self
-
- chartView.chartDescription.enabled = false
-
- chartView.drawBarShadowEnabled = false
- chartView.drawValueAboveBarEnabled = true
-
- chartView.leftAxis.enabled = false
- let rightAxis = chartView.rightAxis
- rightAxis.axisMaximum = 25
- rightAxis.axisMinimum = -25
- rightAxis.drawZeroLineEnabled = true
- rightAxis.labelCount = 7
- rightAxis.valueFormatter = DefaultAxisValueFormatter(formatter: customFormatter)
- rightAxis.labelFont = .systemFont(ofSize: 9)
-
- let xAxis = chartView.xAxis
- xAxis.labelPosition = .bothSided
- xAxis.drawAxisLineEnabled = false
- xAxis.axisMinimum = 0
- xAxis.axisMaximum = 110
- xAxis.centerAxisLabelsEnabled = true
- xAxis.labelCount = 12
- xAxis.granularity = 10
- xAxis.valueFormatter = self
- xAxis.labelFont = .systemFont(ofSize: 9)
-
- let l = chartView.legend
- l.horizontalAlignment = .right
- l.verticalAlignment = .bottom
- l.orientation = .horizontal
- l.formSize = 8
- l.formToTextSpace = 8
- l.xEntrySpace = 6
- // chartView.legend = l
- self.updateChartData()
- }
-
- override func updateChartData() {
- if self.shouldHideData {
- chartView.data = nil
- return
- }
-
- self.setChartData()
- }
-
- func setChartData() {
- let yVals = [BarChartDataEntry(x: 5, yValues: [-10, 10]),
- BarChartDataEntry(x: 15, yValues: [-12, 13]),
- BarChartDataEntry(x: 25, yValues: [-15, 15]),
- BarChartDataEntry(x: 35, yValues: [-17, 17]),
- BarChartDataEntry(x: 45, yValues: [-19, 120]),
- BarChartDataEntry(x: 55, yValues: [-19, 19]),
- BarChartDataEntry(x: 65, yValues: [-16, 16]),
- BarChartDataEntry(x: 75, yValues: [-13, 14]),
- BarChartDataEntry(x: 85, yValues: [-10, 11]),
- BarChartDataEntry(x: 95, yValues: [-5, 6]),
- BarChartDataEntry(x: 105, yValues: [-1, 2])
- ]
-
- let set = BarChartDataSet(entries: yVals, label: "Age Distribution")
- set.drawIconsEnabled = false
- set.valueFormatter = DefaultValueFormatter(formatter: customFormatter)
- set.valueFont = .systemFont(ofSize: 7)
- set.axisDependency = .right
- set.colors = [UIColor(red: 67/255, green: 67/255, blue: 72/255, alpha: 1),
- UIColor(red: 124/255, green: 181/255, blue: 236/255, alpha: 1)
- ]
- set.stackLabels = ["Men", "Women"]
-
- let data = BarChartData(dataSet: set)
- data.barWidth = 8.5
-
- chartView.data = data
- chartView.setNeedsDisplay()
- }
-
- override func optionTapped(_ option: Option) {
- super.handleOption(option, forChartView: chartView)
- }
- }
- extension NegativeStackedBarChartViewController: AxisValueFormatter {
- func stringForValue(_ value: Double, axis: AxisBase?) -> String {
- return String(format: "%03.0f-%03.0f", value, value + 10)
- }
- }
|