我正在尝试使用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]}


  • 在您的自定义“配置图表”方法中,创建一个XAxis对象,将其valueFormatter设置为self(因此将调用上面的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
    

    09-05 21:46