iOS开发Swift

Swift – 第三方图表库Charts使用详解16(柱状图3:多组数据的显示)

import UIKit
import Charts
 
class ViewController: UIViewController {
     
    //柱状图图
    var chartView: BarChartView!
     
    override func viewDidLoad() {
        super.viewDidLoad()
         
        //创建折线图组件对象
        chartView = BarChartView()
        chartView.frame = CGRect(x: 20, y: 80, width: self.view.bounds.width - 40,
                                 height: 260)
        self.view.addSubview(chartView)
         
        //第一组数据
        var dataEntries1 = [BarChartDataEntry]()
        for i in 0..<10 {
            let y = arc4random()%100 + 50
            let entry = BarChartDataEntry(x: Double(i), y: Double(y))
            dataEntries1.append(entry)
        }
        let chartDataSet1 = BarChartDataSet(values: dataEntries1, label: "图例1")
         
        //第二组数据
        var dataEntries2 = [BarChartDataEntry]()
        for i in 0..<10 {
            let y = arc4random()%50
            let entry = BarChartDataEntry(x: Double(i), y: Double(y))
            dataEntries2.append(entry)
        }
        let chartDataSet2 = BarChartDataSet(values: dataEntries2, label: "图例2")
        chartDataSet2.colors = [.orange]
         
        //目前柱状图包括2组立柱
        let chartData = BarChartData(dataSets: [chartDataSet1, chartDataSet2])
         
        //设置柱状图数据
        chartView.data = chartData
    }
}
import UIKit
import Charts
 
class ViewController: UIViewController {
     
    //柱状图图
    var chartView: BarChartView!
     
    //每个分组之间的间隔
    let groupSpace = 0.31
     
    //同一分组内柱子间隔
    let barSpace = 0.03
     
    //柱子宽度( (0.2 + 0.03) * 3 + 0.31 = 1.00 -> interval per "group")
    let barWidth = 0.2
     
    //每组数据条数
    let groupCount = 5
     
    //x轴标签文字
    let years = ["2001", "2002", "2003", "2004", "2005"]
     
    override func viewDidLoad() {
        super.viewDidLoad()
         
        //创建折线图组件对象
        chartView = BarChartView()
        chartView.frame = CGRect(x: 20, y: 80, width: self.view.bounds.width - 40,
                                 height: 260)
        self.view.addSubview(chartView)
         
        //第一组数据
        var dataEntries1 = [BarChartDataEntry]()
        for i in 0..<groupCount {
            let y = arc4random()%100 + 50
            let entry = BarChartDataEntry(x: Double(i), y: Double(y))
            dataEntries1.append(entry)
        }
        let chartDataSet1 = BarChartDataSet(values: dataEntries1, label: "图例1")
         
        //第二组数据
        var dataEntries2 = [BarChartDataEntry]()
        for i in 0..<groupCount {
            let y = arc4random()%50
            let entry = BarChartDataEntry(x: Double(i), y: Double(y))
            dataEntries2.append(entry)
        }
        let chartDataSet2 = BarChartDataSet(values: dataEntries2, label: "图例2")
        chartDataSet2.colors = [.orange]
         
        //第三组数据
        var dataEntries3 = [BarChartDataEntry]()
        for i in 0..<groupCount {
            let y = arc4random()%50
            let entry = BarChartDataEntry(x: Double(i), y: Double(y))
            dataEntries3.append(entry)
        }
        let chartDataSet3 = BarChartDataSet(values: dataEntries3, label: "图例3")
        chartDataSet3.colors = [.green]
         
        //目前柱状图包括2组立柱
        let chartData = BarChartData(dataSets: [chartDataSet1, chartDataSet2,
                                                chartDataSet3])
         
        //设置柱子宽度
        chartData.barWidth = barWidth
         
        //对数据进行分组(不重叠显示)
        chartData.groupBars(fromX: Double(0), groupSpace: groupSpace, barSpace: barSpace)
         
        //设置X轴范围
        chartView.xAxis.axisMinimum = Double(0)
        chartView.xAxis.axisMaximum = Double(0) + chartData
            .groupWidth(groupSpace: groupSpace, barSpace: barSpace) * Double(groupCount)
        chartView.xAxis.centerAxisLabelsEnabled = true  //文字标签居中
        chartView.xAxis.granularity = 1
        chartView.xAxis.labelPosition = .bottom
        chartView.xAxis.valueFormatter = IndexAxisValueFormatter(values:self.years)
         
        //设置y轴范围
        chartView.leftAxis.axisMinimum = 0
        chartView.rightAxis.axisMinimum = 0
         
        //设置柱状图数据
        chartView.data = chartData
    }
}
import UIKit
import Charts
 
class ViewController: UIViewController {
     
    //柱状图图
    var chartView: BarChartView!
     
    override func viewDidLoad() {
        super.viewDidLoad()
         
        //创建折线图组件对象
        chartView = BarChartView()
        chartView.frame = CGRect(x: 20, y: 80, width: self.view.bounds.width - 40,
                                 height: 260)
        //文字显示在柱子内部
        chartView.drawValueAboveBarEnabled = false
        self.view.addSubview(chartView)
         
        //生成10条随机数据
        var dataEntries = [BarChartDataEntry]()
        for i in 0..<10 {
            //每个柱子由两部分数据组成
            let value1 = Double(arc4random()%100)
            let value2 = Double(arc4random()%100)
            let entry = BarChartDataEntry(x: Double(i), yValues: [value1, value2])
            dataEntries.append(entry)
        }
         
        //这10条数据作为柱状图的所有数据
        let chartDataSet = BarChartDataSet(values: dataEntries, label: "每日访问量")
        //堆叠柱形图每部分文字标签
        chartDataSet.stackLabels = ["线上", "线下"]
        //堆叠柱形图每部分使用的颜色
        chartDataSet.colors = [ChartColorTemplates.material()[0],
                               ChartColorTemplates.material()[1]]
         
        //目前柱状图只包括1组立柱
        let chartData = BarChartData(dataSets: [chartDataSet])
        //标签文字颜色为白色
        chartData.setValueTextColor(.white)
         
        //设置柱状图数据
        chartView.data = chartData
    }
}
import UIKit
import Charts
 
class ViewController: UIViewController {
     
    //柱状图图
    var chartView: BarChartView!
     
    override func viewDidLoad() {
        super.viewDidLoad()
         
        //创建折线图组件对象
        chartView = BarChartView()
        chartView.frame = CGRect(x: 20, y: 80, width: self.view.bounds.width - 40,
                                 height: 260)
        //文字显示在柱子内部
        chartView.drawValueAboveBarEnabled = false
        self.view.addSubview(chartView)
         
        //生成10条随机数据
        var dataEntries = [BarChartDataEntry]()
        for i in 0..<10 {
            //每个柱子由两部分数据组成
            let value1 = Double(arc4random()%100)
            let value2 = -Double(arc4random()%100)
            let entry = BarChartDataEntry(x: Double(i), yValues: [value1, value2])
            dataEntries.append(entry)
        }
         
        //这10条数据作为柱状图的所有数据
        let chartDataSet = BarChartDataSet(values: dataEntries, label: "每日交易")
        //堆叠柱形图每部分文字标签
        chartDataSet.stackLabels = ["收入", "支出"]
        //堆叠柱形图每部分使用的颜色
        chartDataSet.colors = [ChartColorTemplates.material()[0],
                               ChartColorTemplates.material()[1]]
         
        //目前柱状图只包括1组立柱
        let chartData = BarChartData(dataSets: [chartDataSet])
        //标签文字颜色为白色
        chartData.setValueTextColor(.white)
         
        //设置柱状图数据
        chartView.data = chartData
    }
}