在Swift 3中的折线图

4

我正在尝试使用这段代码创建一条折线图。我已经列出了大部分的代码,花了几个小时尝试不同的方法。

在类里:

PendingViewController: UIViewController, ChartViewDelegate

插座:

@IBOutlet weak var lineChartView: LineChartView!

ViewDidLoad:
    let months = ["Jan" , "Feb", "Mar", "Apr", "May", "June", "July", "August", "Sept", "Oct", "Nov", "Dec"]
    let dollars1 = [1453.0,2352,5431,1442,5451,6486,1173,5678,9234,1345,9411,2212]
    self.lineChartView.delegate = self
    // 2
    self.lineChartView.descriptionText = "Tap node for details"
    // 3
    self.lineChartView.chartDescription?.textColor = UIColor.white
    self.lineChartView.gridBackgroundColor = UIColor.darkGray
    // 4
    self.lineChartView.noDataText = "No data provided"
    // 5
    setChartData(months: months)

功能:

func setChartData(months : [String]) {

    // 1 - creating an array of data entries
    var yVals1 : [ChartDataEntry] = [ChartDataEntry]()
    for i in 0 ..< months.count {
        yVals1.append(ChartDataEntry(x: dollars1[i], y: Double(i)))
    }

    // 2 - create a data set with our array
    let set1: LineChartDataSet = LineChartDataSet(values: yVals1, label: "First Set")
    set1.axisDependency = .left // Line will correlate with left axis values
    set1.setColor(UIColor.red.withAlphaComponent(0.5)) // our line's opacity is 50%
    set1.setCircleColor(UIColor.red) // our circle will be dark red
    set1.lineWidth = 2.0
    set1.circleRadius = 6.0 // the radius of the node circle
    set1.fillAlpha = 65 / 255.0
    set1.fillColor = UIColor.red
    set1.highlightColor = UIColor.white
    set1.drawCircleHoleEnabled = true

    //3 - create an array to store our LineChartDataSets
    var dataSets : [LineChartDataSet] = [LineChartDataSet]()
    dataSets.append(set1)

    //4 - pass our months in for our x-axis label value along with our dataSets
    let data: LineChartData = LineChartData(xVals: months, dataSets: dataSets)
    data.setValueTextColor(UIColor.white)

    //5 - finally set our data
    self.lineChartView.data = data


}

我收到了以下错误信息:

Cannot invoke initializer for typel 'LineChartData' with an argument list of type '(xVals: [String], dataSets: [LineChartDataSet])'

非常感谢您的来信,
Denis

有人可以帮我吗? - Denis
你能添加库的链接吗? - Nirav D
在您的意见中,使用Pods是一种好的实践吗? - Denis
@Nirav D现在我在.animate函数中遇到了一个错误,错误信息是“BAD ACCESS”。 - Denis
我没有使用过那个库,所以不清楚。也许你需要针对这个问题提出一个新的问题。 - Nirav D
显示剩余6条评论
2个回答

3

可运行的代码片段:(Swift 3.0 和 Chart 3.0)

fileprivate func setChart(_ lineChartView: LineChartView, dataPoints: [Double], values: [Double]) {    
  var dataEntries: [ChartDataEntry] = []

  for i in 0..<dataPoints.count {
    let dataEntry = ChartDataEntry(x: Double(i), y: values[i])
    dataEntries.append(dataEntry)
  }

  let lineChartDataSet = LineChartDataSet(values: dataEntries, label: "Altitude")
  lineChartDataSet.setColor(UIColor.blue)
  // lineChartDataSet.drawCubicEnabled = true
  lineChartDataSet.mode = .cubicBezier
  lineChartDataSet.drawCirclesEnabled = false
  lineChartDataSet.lineWidth = 1.0
  lineChartDataSet.circleRadius = 5.0
  lineChartDataSet.highlightColor = UIColor.red
  lineChartDataSet.drawHorizontalHighlightIndicatorEnabled = true

  var dataSets = [IChartDataSet]()
  dataSets.append(lineChartDataSet)

  let lineChartData = LineChartData(dataSets: dataSets)

  lineChartView.data = lineChartData
}

0
一个提示是如何找出重载(overload)并且我一直在使用。在xCode的“查找导航器”中,你可以搜索“class LineChartData”-- 然后,你可以去检查“LineChartData”类在你的pod中定义的代码,并查看其init方法中有哪些参数。无论如何,根据这个,我相信答案是要更改你所说的那一行代码:
 let data: LineChartData = LineChartData(xVals: months, dataSets: dataSets)

变成这样

 let data: LineChartData = LineChartData(dataSets: dataSets)

这与可用的重载匹配。如果对您来说太晚了,那么上面的内容可能会帮助其他人。


你能帮我回答这个问题吗?http://stackoverflow.com/questions/42958478/line-graph-model-swift-3 - Denis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接