“如何使用iOS图表API在Swift中创build漂亮的图表”

AppCoda教程,date为2015-06-23,指导您完成一个初始项目,不会将其视图引入其中。 但是,我的项目不正确地绘制示例条形图; 在教程中,所有的条都出现了,并被正确标记。 我把这个项目的版本放在这里IOChartsDemo 。

这是我的项目中发生的事情

开发环境:

  • macOS 12.5.5,Xcode 8.3.3(8E3004b)
  • 图表3.0.2

我下载了教程中指出的启动项目。

教程中的starter项目没有build立,有一些问题。 按照教程中的指示,并纠正错误,我最终与此(问题行被注释掉):

class BarChartViewController: UIViewController { @IBOutlet weak var barChartView: BarChartView! var months: [String]! override func viewDidLoad() { super.viewDidLoad() // barChartView.noDataTextDescription = "Just because" type BarChartView doest have noDataTextDescription months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] let unitsSold = [20.0, 4.0, 6.0, 3.0, 12.0, 16.0, 4.0, 18.0, 2.0, 4.0, 5.0, 4.0] // setChart(months, values: unitsSold) missing argument label dataPoints: in call setChart(dataPoints: months, values: unitsSold) } func setChart(dataPoints: [String], values: [Double]) { barChartView.noDataText = "You need to provide data for the chart." var dataEntries: [BarChartDataEntry] = [] for i in 0..<dataPoints.count { // let dataEntry = BarChartDataEntry(value: values[i], xIndex: i) // argument labeld dont match let dataEntry = BarChartDataEntry(x: values[i], y: Double(i), data: dataPoints[i] as AnyObject) dataEntries.append(dataEntry) } let chartDataSet = BarChartDataSet(values: dataEntries, label: "Units Sold") // let chartData = BarChartData(xVals: months, dataSet: chartDataSet) cannot invoke initializer BarCharData with arg list of (xVals: [String]!, dataSet: BarCharDataSet let chartData = BarChartData(dataSets: [chartDataSet]) barChartView.data = chartData } 

}

在这一点上,当我运行的应用程序,我得到了前面的结果。 我通过图表api修复了这些问题。 我想这个问题是由图表2.x到3.x的变化造成的。

如果您是图表专家,我恳请您的协助。

我一直在处理你的问题,首先,你已经颠倒了yx的值

修复这个

这条线let dataEntry = BarChartDataEntry(x: values[i], y: Double(i), data: dataPoints[i] as AnyObject)必须被这个replacelet dataEntry = BarChartDataEntry(x: Double(i), y: values[i], data: dataPoints[i] as AnyObject)

然后你必须使用IndexAxisValueFormatter类来显示底部的图例,我的意思是几个月的名字

添加这行

 barChartView.xAxis.valueFormatter = IndexAxisValueFormatter(values: months) barChartView.xAxis.labelCount = months.count barChartView.xAxis.labelPosition = .bottom 

这是完整的代码

 import UIKit import Charts class BarChartViewController: UIViewController { @IBOutlet weak var barChartView: BarChartView! var months: [String]! override func viewDidLoad() { super.viewDidLoad() // barChartView.noDataTextDescription = "Just because" type BarChartView doest have noDataTextDescription months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] let unitsSold = [20.0, 4.0, 6.0, 3.0, 12.0, 16.0, 4.0, 18.0, 2.0, 4.0, 5.0, 4.0] //setChart(months, values: unitsSold) missing argument label dataPoints: in call setChart(dataPoints: months, values: unitsSold) } func setChart(dataPoints: [String], values: [Double]) { barChartView.noDataText = "You need to provide data for the chart." var dataEntries: [BarChartDataEntry] = [] for i in 0..<dataPoints.count { // let dataEntry = BarChartDataEntry(value: values[i], xIndex: i) // argument labeld dont match let dataEntry = BarChartDataEntry(x: Double(i), y: values[i], data: dataPoints[i] as AnyObject) dataEntries.append(dataEntry) } let chartDataSet = BarChartDataSet(values: dataEntries, label: "Units Sold") // let chartData = BarChartData(xVals: months, dataSet: chartDataSet) cannot invoke initializer BarCharData with arg list of (xVals: [String]!, dataSet: BarCharDataSet let chartData = BarChartData(dataSets: [chartDataSet]) barChartView.data = chartData //barChartView.xAxis.ent barChartView.xAxis.valueFormatter = IndexAxisValueFormatter(values: months) barChartView.xAxis.labelCount = months.count barChartView.xAxis.labelPosition = .bottom } } 

这就是它的样子,希望这可以帮助你

在这里输入图像说明