使用新版本时,我在创建一些图形时遇到了一些麻烦,以前的代码是:
func setChart(dataPoints: [String], values: [Double]) { var dataEntries: [BarChartDataEntry] = [] for i in 0..<dataPoints.count { let dataEntry = BarChartDataEntry(value: values[i], xIndex: i) dataEntries.append(dataEntry) } let chartDataSet = BarChartDataSet(yVals: dataEntries, label: "Units Sold") let chartData = BarChartData(xVals: months, dataSet: chartDataSet) barChartView.data = chartData }
您可以使用以下行来传递值,例如,月份数组:
let chartData = BarChartData(xVals: months, dataSet: chartDataSet)
新版本发布后,用于实现相同图形的代码为:
func setChart(dataPoints: [String], values: [Double]) { var dataEntries: [BarChartDataEntry] = [] for i in 0..<dataPoints.count { let dataEntry = BarChartDataEntry(x: Double(i+2), y:values[i], data: months ) dataEntries.append(dataEntry) } let chartDataSet = BarChartDataSet(values: dataEntries, label: "Units Sold") let chartData = BarChartData() chartData.addDataSet(chartDataSet) barChartView.data = chartData }
我尝试了几个小时,但找不到修改X轴值的方法,希望有人可以帮助我,谢谢!
我找到了解决方案,也许另一个解决方案可以更好地解决此问题,而无需创建新类,这就是我发现的:
首先,您需要创建一个新类,该类将是您的格式化程序类,并添加IAxisValueFormater接口,然后使用stringForValue方法自定义新值,它需要两个参数,第一个是实际值(您可以看到它像索引),第二个是该值所在的轴。
import UIKit import Foundation import Charts @objc(BarChartFormatter) public class BarChartFormatter: NSObject, IAxisValueFormatter { var months: [String]! = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] public func stringForValue(value: Double, axis: AxisBase?) -> String { return months[Int(value)] } }
现在,在文件中,在setChart()函数开始时,您必须创建两个变量,一个用于格式化程序类,一个用于轴类:
let formato:BarChartFormatter = BarChartFormatter() let xaxis:XAxis = XAxis()
接下来,在for in循环的末尾继续操作,并将索引和轴传递给格式化程序变量:
formato.stringForValue(Double(i), axis: xaxis)
循环后,将格式添加到轴变量中:
xaxis.valueFormatter = formato
最后一步是将新的xaxisformatted添加到barChartView中:
barChartView.xAxis.valueFormatter = xaxis.valueFormatter
这就是setChart()函数中的所有其他行,只是将其保留在原处,希望它能为您提供帮助。