美文网首页
iOS Charts库的简单使用 - CombinedChart

iOS Charts库的简单使用 - CombinedChart

作者: gaookey | 来源:发表于2020-10-21 10:35 被阅读0次

    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]
        }
    }
    
    
    image.png

    相关文章

      网友评论

          本文标题:iOS Charts库的简单使用 - CombinedChart

          本文链接:https://www.haomeiwen.com/subject/zzzjmktx.html