日期为 2015 年 6 月 23 日的 AppCoda 教程将指导您完成一个不会将其视图绘制为视图的入门项目。但是,我的项目错误地绘制了示例条形图;在教程中,所有条形都会出现,并正确标记。我把我的项目版本放在这里IOChartsDemo。
开发环境:
我下载了教程中指示的入门项目。
教程中的入门项目没有构建,存在api问题。按照教程中的说明并更正错误后,我最终得到了这个(问题行已注释掉):
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
}
Run Code Online (Sandbox Code Playgroud)
}
在这一点上,当我运行应用程序时,我得到了前面指出的结果。我在通过 Charts api 后修复了这些。我想这个问题是由图表 2.x 到 3.x 的变化引起的。
如果您是图表专家,我恳请您提供帮助。
我一直在研究你的问题,首先,你颠倒了y和x
修复这个
这一行let dataEntry = BarChartDataEntry(x: values[i], y: Double(i), data: dataPoints[i] as AnyObject)必须被这一行取代let 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
Run Code Online (Sandbox Code Playgroud)
这是完整的代码
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
}
}
Run Code Online (Sandbox Code Playgroud)
这就是它的外观,希望这对你有帮助
| 归档时间: |
|
| 查看次数: |
669 次 |
| 最近记录: |