iOS Charts库的简单使用 - BarChartView
iOS Charts库的简单使用 - PieChartView
iOS Charts库的简单使用 - LineChartView
iOS Charts库的简单使用 - CombinedChartView
Charts 库各类之间属性基本互通,可相互参考,更多属性参看 iOS Charts库的简单使用 - BarChartView
更多使用方法及属性参考 MPAndroidChart
文档:MPAndroidChart Documentation
最后附上 demo,demo有个别错误未修改,请甄别。
以下代码摘自 Charts
库demo
import UIKit
import Charts
private let ITEM_COUNT = 12
class ViewController: UIViewController {
let months = ["Jan", "Feb", "Mar",
"Apr", "May", "Jun",
"Jul", "Aug", "Sep",
"Oct", "Nov", "Dec"]
let chartView = CombinedChartView(frame: CGRect(x: 20, y: 50, width: UIScreen.main.bounds.width - 40, height: UIScreen.main.bounds.height - 100))
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(chartView)
chartView.chartDescription?.enabled = false
chartView.drawBarShadowEnabled = false
chartView.highlightFullBarEnabled = false
chartView.drawOrder = [DrawOrder.bar.rawValue,
DrawOrder.bubble.rawValue,
DrawOrder.candle.rawValue,
DrawOrder.line.rawValue,
DrawOrder.scatter.rawValue]
let l = chartView.legend
l.wordWrapEnabled = true
l.horizontalAlignment = .center
l.verticalAlignment = .bottom
l.orientation = .horizontal
l.drawInside = false
let rightAxis = chartView.rightAxis
rightAxis.axisMinimum = 0
let leftAxis = chartView.leftAxis
leftAxis.axisMinimum = 0
let xAxis = chartView.xAxis
xAxis.labelPosition = .bothSided
xAxis.axisMinimum = 0
xAxis.granularity = 1
xAxis.valueFormatter = self
setChartData()
}
func setChartData() {
let data = CombinedChartData()
data.lineData = generateLineData()
data.barData = generateBarData()
data.bubbleData = generateBubbleData()
data.scatterData = generateScatterData()
data.candleData = generateCandleData()
chartView.xAxis.axisMaximum = data.xMax + 0.25
chartView.data = data
}
func generateLineData() -> LineChartData {
let entries = (0..<ITEM_COUNT).map { (i) -> ChartDataEntry in
return ChartDataEntry(x: Double(i) + 0.5, y: Double(arc4random_uniform(15) + 5))
}
let set = LineChartDataSet(entries: entries, label: "Line DataSet")
set.setColor(UIColor(red: 240/255, green: 238/255, blue: 70/255, alpha: 1))
set.lineWidth = 2.5
set.setCircleColor(UIColor(red: 240/255, green: 238/255, blue: 70/255, alpha: 1))
set.circleRadius = 5
set.circleHoleRadius = 2.5
set.fillColor = UIColor(red: 240/255, green: 238/255, blue: 70/255, alpha: 1)
set.mode = .cubicBezier
set.drawValuesEnabled = true
set.valueFont = .systemFont(ofSize: 10)
set.valueTextColor = UIColor(red: 240/255, green: 238/255, blue: 70/255, alpha: 1)
set.axisDependency = .left
return LineChartData(dataSet: set)
}
func generateBarData() -> BarChartData {
let entries1 = (0..<ITEM_COUNT).map { _ -> BarChartDataEntry in
return BarChartDataEntry(x: 0, y: Double(arc4random_uniform(25) + 25))
}
let entries2 = (0..<ITEM_COUNT).map { _ -> BarChartDataEntry in
return BarChartDataEntry(x: 0, yValues: [Double(arc4random_uniform(13) + 12), Double(arc4random_uniform(13) + 12)])
}
let set1 = BarChartDataSet(entries: entries1, label: "Bar 1")
set1.setColor(UIColor(red: 60/255, green: 220/255, blue: 78/255, alpha: 1))
set1.valueTextColor = UIColor(red: 60/255, green: 220/255, blue: 78/255, alpha: 1)
set1.valueFont = .systemFont(ofSize: 10)
set1.axisDependency = .left
let set2 = BarChartDataSet(entries: entries2, label: "")
set2.stackLabels = ["Stack 1", "Stack 2"]
set2.colors = [UIColor(red: 61/255, green: 165/255, blue: 255/255, alpha: 1),
UIColor(red: 23/255, green: 197/255, blue: 255/255, alpha: 1)
]
set2.valueTextColor = UIColor(red: 61/255, green: 165/255, blue: 255/255, alpha: 1)
set2.valueFont = .systemFont(ofSize: 10)
set2.axisDependency = .left
let groupSpace = 0.06
let barSpace = 0.02 // x2 dataset
let barWidth = 0.45 // x2 dataset
// (0.45 + 0.02) * 2 + 0.06 = 1.00 -> interval per "group"
let data = BarChartData(dataSets: [set1, set2])
data.barWidth = barWidth
// make this BarData object grouped
data.groupBars(fromX: 0, groupSpace: groupSpace, barSpace: barSpace)
return data
}
func generateScatterData() -> ScatterChartData {
let entries = stride(from: 0.0, to: Double(ITEM_COUNT), by: 0.5).map { (i) -> ChartDataEntry in
return ChartDataEntry(x: i+0.25, y: Double(arc4random_uniform(10) + 55))
}
let set = ScatterChartDataSet(entries: entries, label: "Scatter DataSet")
set.colors = ChartColorTemplates.material()
set.scatterShapeSize = 4.5
set.drawValuesEnabled = false
set.valueFont = .systemFont(ofSize: 10)
return ScatterChartData(dataSet: set)
}
func generateCandleData() -> CandleChartData {
let entries = stride(from: 0, to: ITEM_COUNT, by: 2).map { (i) -> CandleChartDataEntry in
return CandleChartDataEntry(x: Double(i+1), shadowH: 90, shadowL: 70, open: 85, close: 75)
}
let set = CandleChartDataSet(entries: entries, label: "Candle DataSet")
set.setColor(UIColor(red: 80/255, green: 80/255, blue: 80/255, alpha: 1))
set.decreasingColor = UIColor(red: 142/255, green: 150/255, blue: 175/255, alpha: 1)
set.shadowColor = .darkGray
set.valueFont = .systemFont(ofSize: 10)
set.drawValuesEnabled = false
return CandleChartData(dataSet: set)
}
func generateBubbleData() -> BubbleChartData {
let entries = (0..<ITEM_COUNT).map { (i) -> BubbleChartDataEntry in
return BubbleChartDataEntry(x: Double(i) + 0.5,
y: Double(arc4random_uniform(10) + 105),
size: CGFloat(arc4random_uniform(50) + 105))
}
let set = BubbleChartDataSet(entries: entries, label: "Bubble DataSet")
set.setColors(ChartColorTemplates.vordiplom(), alpha: 1)
set.valueTextColor = .white
set.valueFont = .systemFont(ofSize: 10)
set.drawValuesEnabled = true
return BubbleChartData(dataSet: set)
}
}
extension ViewController: IAxisValueFormatter {
func stringForValue(_ value: Double, axis: AxisBase?) -> String {
return months[Int(value) % months.count]
}
}