IOS 图表 - 堆叠条形图不会堆叠

IOS Charts - Stack Bar Chart won't stack

出于某种原因,我的两个数据集彼此重叠,而不是如下所示堆叠。例如,星期一总计 22。星期三总计 6。

我创建了两个数据集,因为我想更改每个数据集的颜色:

let chartDataSet1 = BarChartDataSet(values: dataEntries1, label: "Points")
chartDataSet1.barBorderColor = .gray
let chartDataSet2 = BarChartDataSet(values: dataEntries2, label: "Scans")
chartDataSet2.barBorderColor = .red

...

class ViewController: UIViewController {

    @IBOutlet weak var barChartView: BarChartView!

    override func viewDidLoad() {
        super.viewDidLoad()

        barChartView.descriptionText = ""
        barChartView.xAxis.labelPosition = .bottom
        let ll = ChartLimitLine(limit: 10.0, label: "Target")
        barChartView.rightAxis.addLimitLine(ll)
        setChart()
    }

    func setChart(){
        let months = ["Mon", "Tues", "Wed", "Thu", "Fri", "Sat", "Sun"]
        let points = [20.0, 4.0, 3.0, 6.0, 12.0, 16.0, 4.0]
        let scans = [2.0, 4.0, 3.0, 6.0, 2.0, 4.0, 2.0]
        barChartView.setBarChartData(xValues: months, yValues1: scans, yValues2: points)

    }
}

......

extension BarChartView {


    func setBarChartData(xValues: [String], yValues1: [Double], yValues2 : [Double]) {

        var dataEntries1: [BarChartDataEntry] = []
        var dataEntries2: [BarChartDataEntry] = []

        for i in 0..<yValues1.count {
            let dataEntry1 = BarChartDataEntry(x: Double(i), yValues:  [yValues1[i]], label: "Points")
            // let dataEntry = BarChartDataEntry(x: Double(i), y: yValues[i])
            dataEntries1.append(dataEntry1)
        }

        for i in 0..<yValues2.count {
            let dataEntry2 = BarChartDataEntry(x: Double(i), yValues:  [yValues2[i]], label: "Scans")
            // let dataEntry = BarChartDataEntry(x: Double(i), y: yValues[i])
            dataEntries2.append(dataEntry2)
        }
        let chartDataSet1 = BarChartDataSet(values: dataEntries1, label: "Points")
        chartDataSet1.barBorderColor = .gray
        let chartDataSet2 = BarChartDataSet(values: dataEntries2, label: "Scans")
        chartDataSet2.barBorderColor = .red
        let chartData = BarChartData(dataSets: [chartDataSet1, chartDataSet2])

        let chartFormatter = BarChartFormatter(labels: xValues)
        let xAxis = XAxis()
        xAxis.valueFormatter = chartFormatter
        self.xAxis.valueFormatter = xAxis.valueFormatter

        self.data = chartData
    }
}

如果我将 chartDataSet1 和 chartDataSet2 合并到一个数组中,条形会正确堆叠,但我不知道如何更改每个条形的颜色:

您必须像这样设置条形图数据:

extension BarChartView {

    func setBarChartData(xValues: [String], yValues1: [Double], yValues2 : [Double]) {

        var dataEntries1: [BarChartDataEntry] = []
        for i in 0..<yValues1.count {
            let dataEntry1 = BarChartDataEntry(x: Double(i), yValues:  [yValues1[i], yValues2[i]], label: "Points")
            dataEntries1.append(dataEntry1)
        }

        let chartDataSet1 = BarChartDataSet(values: dataEntries1, label: "Points")
        chartDataSet1.barBorderColor = .red
        chartDataSet1.stackLabels = ["Points", "Scans"]
        chartDataSet1.colors =  [UIColor.darkGray, UIColor.lightGray]

        let chartData = BarChartData(dataSets: [chartDataSet1])

        let chartFormatter = BarChartFormatter(labels: xValues)
        let xAxis = XAxis()
        xAxis.valueFormatter = chartFormatter
        self.xAxis.valueFormatter = xAxis.valueFormatter
        self.data = chartData
    }
}