在Swift中使用ios-charts(MPAndroidChart端口)的水平堆叠barChartView

时间:2017-01-14 21:55:48

标签: ios swift ios-charts

我尝试重新创建类似于此示例的堆叠水平条形图:http://www.highcharts.com/demo/bar-stacked

我目前的图表非常接近这个例子,但我不具备我想要的标签/着色的灵活性。

import UIKit
import Charts

@objc(BarChartFormatter)
public class BarChartFormatter: NSObject, IAxisValueFormatter {
    var names = [String]()

    public func stringForValue(_ value: Double, axis: AxisBase?) -> String {
        return names[Int(value)]
    }

    public func setValues(values: [String]) {
        self.names = values
    }
}

class graphController: UIViewController {
    @IBOutlet weak var barChartView: HorizontalBarChartView!

    func setChart(dataPoints: [String], values: [[Double]]) {
        let formatter = BarChartFormatter()
        formatter.setValues(values: dataPoints)
        let xaxis:XAxis = XAxis()

        barChartView.noDataText = "No data."
        var dataEntries: [BarChartDataEntry] = []

        for j in 0..<values.count {
            let dataEntry = BarChartDataEntry(x: Double(j), yValues: values[j], label: dataPoints[j])
            dataEntries.append(dataEntry)
        }

        let chartDataSet = BarChartDataSet(values: dataEntries, label: nil)
        chartDataSet.colors = [UIColor(red: 0.0, green: 0.5, blue: 1.0, alpha: 1.0), UIColor(red: 0.5, green: 0.5, blue: 1.0, alpha: 1.0), UIColor(red: 1.0, green: 0.5, blue: 1.0, alpha: 1.0)]
        chartDataSet.valueTextColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0)
        let chartData = BarChartData(dataSet: chartDataSet)

        xaxis.valueFormatter = formatter
        barChartView.xAxis.labelPosition = .bottom
        barChartView.xAxis.drawGridLinesEnabled = false
        barChartView.xAxis.valueFormatter = xaxis.valueFormatter
        barChartView.xAxis.granularityEnabled = true
        barChartView.xAxis.granularity = 1.0
        barChartView.xAxis.decimals = 0
        barChartView.chartDescription?.enabled = false
        barChartView.legend.enabled = true
        barChartView.rightAxis.enabled = false
        barChartView.data = chartData
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        barChartView.noDataText = "No activity data."
        barChartView.noDataTextColor = UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
        barChartView.xAxis.labelTextColor = UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
        barChartView.legend.textColor = UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
        barChartView.backgroundColor = UIColor(red: 0.1, green: 0.1, blue: 0.1, alpha: 1.0)
        barChartView.tintColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0)
        barChartView.gridBackgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0)
        barChartView.borderColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0)
        barChartView.xAxis.gridColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0)
        barChartView.xAxis.axisLineColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0)
        barChartView.animate(xAxisDuration: 2.0, yAxisDuration: 2.0)
        barChartView.rightAxis.enabled = false
        barChartView.leftAxis.enabled = false

        let names = ["A", "B", "C"]
        let values = [[2.0,1.0,1.0], [1.0,2.0,1.0], [1.0,1.0,2.0]]

        setChart(dataPoints: names, values: values)
    }
}

enter image description here

如何修改setChart()以基于每个条形而不是数据集级别指定颜色,并在每个颜色的基础上指定我的图例而不是&#34; Stack&#34 ;

0 个答案:

没有答案