我正在尝试使用ios-chart 3.0将标签放在条形图中但没有成功。我的标签是dinamically显示,几个月没有固定。
let chartDataSet = BarChartDataSet(values: dataEntries, label: "animals")
let chartData = BarChartData(xVals: animalsArray, dataSet: chartDataSet)
最后一行显示"无法为类型' BarChartData'调用初始值设定项。使用类型'(xVals:[String],dataSet:BarChartDataSet)''"
的参数列表答案 0 :(得分:2)
我也在努力解决这个问题。如果我理解正确,从iOS-Charts 3.0开始,你不能同时传递x和y值,所以你在网上找到的2.x版本的教程指向错误的方向(你可以不再使用BarChartData(xVals: dataSet:)
了。
最重要的是,文档仅限Android,并且示例代码使用了神秘的变量名,这对我这样的初学者没有帮助从示例项目中看出来,但我想我做到了,从现在起我可以将自定义字符串作为标签。方法如下:
使您的班级符合IAxisValueFormatter
协议:
class ChartsViewController : UIViewController, IAxisValueFormatter {//...}
为您的类添加属性以获取字符串标签,并对其进行初始化(对其值进行硬编码,如下例所示,或者在viewDidLoad:
中设置它们):
var labelStrings : Array<String> = ["these", "will", "be", "your", "labels"]
实施stringForValue:
所需的IAxisValueFormatter
方法:
func stringForValue(_ value: Double, axis: AxisBase?) -> String {
return labelStrings[Int(value) % labelStrings.count]}
在自定义“配置图表”方法中,创建一个XAxis对象,将其valueFormatter设置为self(因此调用上面的stringForValue:
)并将chartView.valueFormatter设置为等于Axis.valueFormatter:< / p>
let xAxis = XAxis()
xAxis.valueFormatter = self
barChartView.xAxis.valueFormatter = xAxis.valueFormatter
通过以上几点,您可以在X轴上获得自定义标签,但当然您仍需要设置Y的值;以防万一其他人来这里寻求答案,以下是设置这些值的代码:
let yValues = myArrayOfCustomValues.enumerated().map { index, element -> BarChartDataEntry in
return BarChartDataEntry(x: Double(index), y: element)
}
let chartDataSet = BarChartDataSet(values: yValues, label: "If you want a label; you can also pass nil")
let chartData = BarChartData(dataSet: chartDataSet)
barChartView.data = chartData