我正在尝试使用ios-chart 3.0在barchart中放置标签,但没有成功。我的标签会显示出来,没有固定的月份。
let chartDataSet = BarChartDataSet(values: dataEntries, label: "animals")
let chartData = BarChartData(xVals: animalsArray, dataSet: chartDataSet)
最后一行显示“无法为类型为'(xVals:[String],dataSet:BarChartDataSet)的参数列表的类型'BarChartData'调用初始化程序''”
最佳答案
我也为这个问题苦苦挣扎。如果我正确理解,从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]}
stringForValue:
),并将chartView.valueFormatter设置为与Axis.valueFormatter相等: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