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

三、包含多组数据的柱状图
1,多组数据相互覆盖
(1)效果图
下面是一个包含有两组数据的柱状图。
各组中 x 坐标一样的柱子会重叠在一起(后面覆盖前面的)。
原文:Swift - 第三方图表库Charts使用详解16(柱状图3:多组数据的显示)

(2)样例代码

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
}

}

2,多组数据分组显示
(1)效果图
下面是一个包含有 3 组数据的柱状图。
各组 x 坐标一样的柱子不会重叠,而是并排显示在一个个标签区域内。
原文:Swift - 第三方图表库Charts使用详解16(柱状图3:多组数据的显示)

(2)样例代码
注意:这种显示方式的关键点在于设置好立柱的宽度、间隔,确保每个区块的宽度总和是 1。

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
}

}

3,堆叠柱形图(stackedbar)
(1)堆叠柱形图指的是每根立柱由多个部分叠加而成,下面是一个简单的样例。
原文: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)
    //文字显示在柱子内部
    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
}

}

(2)下面是一个同时包含有正值和负值的堆叠柱形图。
原文: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)
    //文字显示在柱子内部
    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
}

}

(3)上面样例把 BarChartView 换成 HorizontalBarChartView 则可以变成横向条形图。
原文:Swift - 第三方图表库Charts使用详解16(柱状图3:多组数据的显示)

原文出自:www.hangge.com 原文链接:https://www.hangge.com/blog/cache/detail_2149.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值