在ios barchart 3.0中标记xAxis

时间:2016-12-08 17:19:38

标签: ios ios-charts

我正在尝试使用ios-chart 3.0将标签放在条形图中但没有成功。我的标签是dinamically显示,几个月没有固定。

let chartDataSet = BarChartDataSet(values: dataEntries, label: "animals")
let chartData = BarChartData(xVals: animalsArray, dataSet: chartDataSet)

最后一行显示"无法为类型' BarChartData'调用初始值设定项。使用类型'(xVals:[String],dataSet:BarChartDataSet)''"

的参数列表

1 个答案:

答案 0 :(得分:2)

我也在努力解决这个问题。如果我理解正确,从iOS-Charts 3.0开始,你不能同时传递x和y值,所以你在网上找到的2.x版本的教程指向错误的方向(你可以不再使用BarChartData(xVals: dataSet:)了。

最重要的是,文档仅限Android,并且示例代码使用了神秘的变量名,这对我这样的初学者没有帮助从示例项目中看出来,但我想我做到了,从现在起我可以将自定义字符串作为标签。方法如下:

  1. 使您的班级符合IAxisValueFormatter协议:

    class ChartsViewController : UIViewController, IAxisValueFormatter {//...}

    1. 为您的类添加属性以获取字符串标签,并对其进行初始化(对其值进行硬编码,如下例所示,或者在viewDidLoad:中设置它们):

      var labelStrings : Array<String> = ["these", "will", "be", "your", "labels"]

      1. 实施stringForValue:所需的IAxisValueFormatter方法:

        func stringForValue(_ value: Double, axis: AxisBase?) -> String { return labelStrings[Int(value) % labelStrings.count]}

        1. 在自定义“配置图表”方法中,创建一个XAxis对象,将其valueFormatter设置为self(因此调用上面的stringForValue:)并将chartView.valueFormatter设置为等于Axis.valueFormatter:< / p>

          let xAxis = XAxis() xAxis.valueFormatter = self barChartView.xAxis.valueFormatter = xAxis.valueFormatter

        2. 通过以上几点,您可以在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