2016-03-22 170 views
2

我想在swift(iOS圖表)中合併一個線條和條形圖。 x軸和y軸都可以正確縮放,但數據並未顯示在圖表上。我錯過了什麼? enter image description here使用iOS圖表的組合圖表(線條和條形圖)

import UIKit 
import Charts 

class CombinedChartsTest: UIViewController { 


@IBOutlet weak var combinedChart: CombinedChartView! 


let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] 
let unitsSold = [2.0, 4.0, 6.0, 3.0, 12.0, 16.0, 4.0, 17.0, 2.0, 4.0, 5.0, 4.0] 

override func viewDidLoad() { 
    super.viewDidLoad() 

    setChart(months, yValuesLineChart: unitsSold, yValuesBarChart: unitsSold) 
} 

func setChart(xValues: [String], yValuesLineChart: [Double], yValuesBarChart: [Double]) { 
    combinedChart.noDataText = "Please provide data for the chart." 

    var yVals1 : [ChartDataEntry] = [ChartDataEntry]() 
    var yVals2 : [BarChartDataEntry] = [BarChartDataEntry]() 

    for i in 0..<xValues.count { 

     yVals1.append(ChartDataEntry(value: yValuesLineChart[i], xIndex: i)) 
     yVals2.append(BarChartDataEntry(value: yValuesBarChart[i] - 1, xIndex: i)) 

    } 

    let lineChartSet = LineChartDataSet(yVals: yVals1, label: "Line Data") 
    let barChartSet: BarChartDataSet = BarChartDataSet(yVals: yVals2, label: "Bar Data") 

    let data: CombinedChartData = CombinedChartData(xVals: xValues, dataSets: [lineChartSet,barChartSet]) 

    combinedChart.data = data 

} 
} 

回答

6

我終於設法弄清楚丟失了什麼。

import UIKit 
import Charts 

class CombinedChartsTest: UIViewController { 


@IBOutlet weak var combinedChartView: CombinedChartView! 


let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] 
let unitsSold = [2.0, 4.0, 6.0, 3.0, 12.0, 16.0, 4.0, 17.0, 2.0, 4.0, 5.0, 4.0] 

override func viewDidLoad() { 
    super.viewDidLoad() 

    setChart(months, yValuesLineChart: unitsSold, yValuesBarChart: unitsSold) 
} 

func setChart(xValues: [String], yValuesLineChart: [Double], yValuesBarChart: [Double]) { 
    combinedChartView.noDataText = "Please provide data for the chart." 

    var yVals1 : [ChartDataEntry] = [ChartDataEntry]() 
    var yVals2 : [BarChartDataEntry] = [BarChartDataEntry]() 

    for i in 0..<xValues.count { 

     yVals1.append(ChartDataEntry(value: yValuesLineChart[i], xIndex: i)) 
     yVals2.append(BarChartDataEntry(value: yValuesBarChart[i] - 1, xIndex: i)) 

    } 

    let lineChartSet = LineChartDataSet(yVals: yVals1, label: "Line Data") 
    let barChartSet: BarChartDataSet = BarChartDataSet(yVals: yVals2, label: "Bar Data") 


    let data: CombinedChartData = CombinedChartData(xVals: xValues) 
    data.barData = BarChartData(xVals: xValues, dataSets: [barChartSet]) 
    data.lineData = LineChartData(xVals: xValues, dataSets: [lineChartSet]) 

    combinedChartView.data = data 

} 
} 
+0

任何人都可以建議我怎麼同樣的事情Swift3x –

+0

的迅速和圖表的版本,您使用的? 我沒有具有參數==「xVals」的combinedChartData的init方法,我只有init(dataSets:[IChartDataSet]?)方法,並且IChartDateSets沒有任何init因爲它是一個協議。 –

4

我用這樣的

`

func setChart(xValues: [String], yValuesLineChart: [Double], yValuesBarChart: [Double] , combinedChartView:CombinedChartView) { 
    combinedChartView.noDataText = "Please provide data for the chart." 

    var yVals1 : [ChartDataEntry] = [ChartDataEntry]() 
    var yVals2 : [BarChartDataEntry] = [BarChartDataEntry]() 

    for i in 0..<xValues.count { 

     yVals1.append(ChartDataEntry(value: yValuesLineChart[i], xIndex: i)) 
     yVals2.append(BarChartDataEntry(value: yValuesBarChart[i] , xIndex: i)) 

    } 


    let lineChartSet = LineChartDataSet(yVals: yVals1, label: "Line Data") 
    lineChartSet.colors = [UIColor(red: 168.0/255.0, green: 164.0/255.0, blue: 164.0/255.0, alpha: 1.0)] 

    // lineChartSet.mode = .CubicBezier 
    lineChartSet.lineWidth = 5.0 
    lineChartSet.drawCirclesEnabled = false 
    //lineChartSet.drawFilledEnabled = true 
    /*lineChartSet.colors = [UIColor(red: 0, green: 0, blue: 1, alpha: 0.0)] 
    lineChartSet.fillColor = UIColor(red: 1, green: 0, blue: 0, alpha: 1.0) 
    lineChartSet.fillAlpha = 0.8*/ 



    let barChartSet: BarChartDataSet = BarChartDataSet(yVals: yVals2, label: "Bar Data") 
    // barChartSet.colors = ChartColorTemplates.colorful() 
    barChartSet.barSpace = 0.65 

    barChartSet.barShadowColor = UIColor(red: 1, green: 0, blue: 0, alpha: 0)// If alpha is > 0, then grey bars will appear. 



    let data: CombinedChartData = CombinedChartData(xVals: xValues) 
    data.barData = BarChartData(xVals: xValues, dataSets: [barChartSet]) 
    data.lineData = LineChartData(xVals: xValues, dataSets: [lineChartSet]) 
    //barChartView.leftAxis.startAtZeroEnabled = true 
    combinedChartView.leftAxis.axisMinValue = 0 

    combinedChartView.data = data 

    combinedChartView.leftAxis.drawLabelsEnabled = false 
    combinedChartView.rightAxis.drawLabelsEnabled = false 
    //barChartView.leftAxis.startAtZeroEnabled = true 
    combinedChartView.leftAxis.axisMinValue = 0 
    combinedChartView.descriptionText = "" 
    combinedChartView.legend.enabled = false 
    combinedChartView.backgroundColor = UIColor.clearColor() 
    // combinedChartView.barSpace = 0.65 


    combinedChartView.leftAxis.gridColor = UIColor(red: 179.0/255.0, green: 179.0/255.0, blue: 179.0/255.0, alpha: 0.2) 
    combinedChartView.rightAxis.gridColor = UIColor(red: 179.0/255.0, green: 179.0/255.0, blue: 179.0/255.0, alpha: 0.2) 

} 

`

+0

請給你的答案補充一些補充。只顯示代碼可能會造成混淆。 –

+0

任何人都可以建議我如何與Swift3x同樣的事情 –

相關問題