ChartsDemo-macOS/PlaygroundChart.playground/Pages/CombinedChart.xcplaygroundpage/Contents.swift (88 lines of code) (raw):
//
// PlayGround
//
// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda
// Copyright © 2017 thierry Hentic.
// A port of MPAndroidChart for iOS
// Licensed under Apache License 2.0
//
// https://github.com/danielgindi/ios-charts
/*:
****
[Menu](Menu)
[Previous](@previous) | [Next](@next)
****
*/
//: # Combined Chart
import Cocoa
import Charts
import PlaygroundSupport
func setChartData()
{
let data = CombinedChartData()
data.lineData = generateLineData()
data.barData = generateBarData()
chartView.xAxis.axisMaximum = data.xMax + 0.25
chartView.data = data
}
//: ## function generateLineData
func generateLineData() -> LineChartData
{
//: ### ChartDataEntry
var entries = [ChartDataEntry]()
for index in 0..<ITEM_COUNT
{
entries.append(ChartDataEntry(x: Double(index) + 0.5, y: (Double(arc4random_uniform(15) + 5))))
}
//: ### LineChartDataSet
let set = LineChartDataSet(values: entries, label: "Line DataSet")
set.colors = [#colorLiteral(red: 0.941176470588235, green: 0.933333333333333, blue: 0.274509803921569, alpha: 1.0)]
set.lineWidth = 2.5
set.circleColors = [#colorLiteral(red: 0.941176470588235, green: 0.933333333333333, blue: 0.274509803921569, alpha: 1.0)]
set.circleHoleRadius = 2.5
set.fillColor = #colorLiteral(red: 0.941176470588235, green: 0.933333333333333, blue: 0.274509803921569, alpha: 1.0)
set.mode = .cubicBezier
set.drawValuesEnabled = true
set.valueFont = NSUIFont.systemFont(ofSize: CGFloat(10.0))
set.valueTextColor = #colorLiteral(red: 0.941176470588235, green: 0.933333333333333, blue: 0.274509803921569, alpha: 1.0)
set.axisDependency = .left
//: ### LineChartData
let data = LineChartData()
data.addDataSet(set)
return data
}
//: ## function generateBarData
func generateBarData() -> BarChartData
{
//: ### BarChartDataEntry
var entries1 = [BarChartDataEntry]()
var entries2 = [BarChartDataEntry]()
for _ in 0..<ITEM_COUNT
{
entries1.append(BarChartDataEntry(x: 0.0, y: (Double(arc4random_uniform(25) + 25))))
/*:
- Note: stacked
*/
entries2.append(BarChartDataEntry(x: 0.0, yValues: [Double(arc4random_uniform(13) + 12), Double(arc4random_uniform(13) + 12)]))
}
//: ### BarChartDataSet
let set1 = BarChartDataSet(values: entries1, label: "Bar 1")
set1.colors = [#colorLiteral(red: 0.235294117647059, green: 0.862745098039216, blue: 0.305882352941176, alpha: 1.0)]
set1.valueTextColor = #colorLiteral(red: 0.235294117647059, green: 0.862745098039216, blue: 0.305882352941176, alpha: 1.0)
set1.valueFont = NSUIFont.systemFont(ofSize: CGFloat(10.0))
set1.axisDependency = .left
let set2 = BarChartDataSet(values: entries2, label: "Bar 2")
set2.stackLabels = ["Stack 1", "Stack 2"]
set2.colors = [#colorLiteral(red: 0.23921568627451, green: 0.647058823529412, blue: 1.0, alpha: 1.0), #colorLiteral(red: 0.090196078431373, green: 0.772549019607843, blue: 1.0, alpha: 1.0)]
set2.valueTextColor = #colorLiteral(red: 0.23921568627451, green: 0.647058823529412, blue: 1.0, alpha: 1.0)
set2.valueFont = NSUIFont.systemFont(ofSize: CGFloat(10.0))
set2.axisDependency = .left
//: ### BarChartData
let groupSpace = 0.06
let barSpace = 0.02
let barWidth = 0.45
/*:
- Note: x2 dataset
(0.45 + 0.02) * 2 + 0.06 = 1.00 -> interval per "group"
*/
let data = BarChartData(dataSets: [set1, set2])
data.barWidth = barWidth
/*:
- Note: make this BarData object grouped
*/
data.groupBars(fromX: 0.0, groupSpace: groupSpace, barSpace: barSpace) // start at x = 0
return data
}
//: ## Principal
let ITEM_COUNT = 12
let r = CGRect(x: 0, y: 0, width: 600, height: 600)
var chartView = CombinedChartView(frame: r)
//: ### General
chartView.drawGridBackgroundEnabled = false
chartView.drawBarShadowEnabled = false
chartView.highlightFullBarEnabled = false
chartView.drawOrder = [DrawOrder.bar.rawValue, DrawOrder.bubble.rawValue, DrawOrder.candle.rawValue, DrawOrder.line.rawValue, DrawOrder.scatter.rawValue]
//: ### xAxis
let xAxis = chartView.xAxis
xAxis.labelPosition = .bothSided
xAxis.axisMinimum = 0.0
xAxis.granularity = 1.0
//xAxis.valueFormatter = BarChartFormatter()
//: ### LeftAxis
let leftAxis = chartView.leftAxis
leftAxis.drawGridLinesEnabled = false
leftAxis.axisMinimum = 0.0
//: ### RightAxis
let rightAxis = chartView.rightAxis
rightAxis.drawGridLinesEnabled = false
rightAxis.axisMinimum = 0.0
//: ### Legend
let legend = chartView.legend
legend.wordWrapEnabled = true
legend.horizontalAlignment = .center
legend.verticalAlignment = .bottom
legend.orientation = .horizontal
legend.drawInside = false
//: ### Description
chartView.chartDescription?.enabled = false
setChartData()
chartView.animate(xAxisDuration: 2.0, yAxisDuration: 2.0, easingOption: .easeInBounce)
/*:---*/
//: ### Setup for the live view
PlaygroundPage.current.liveView = chartView
/*:
****
[Previous](@previous) | [Next](@next)
*/