iOS 图表库为什么我的 Bar/PieChart 函数只有 "dataset" 而没有 "xVals"

iOS Chart library why my Bar/PieChart function has only "dataset" but no "xVals"

我正在使用 Daniel 的 IOS 图表框架和 Xcode7.3.1。我完成了基础教程并尝试设置第一个示例。

问题是我无法分配 X 轴字符串标签

我在教程中看到当我们将数据分配给图表时,我们应该使用

let chartData = BarChartData(xVals: dataPoints, dataSet: chartDataSet)

完成最后一步,但下面是我在这里看到的内容。

没有参数 "xVals" 但只有 "dataset" 可用。

有人知道吗?

结果将只是没有任何 xaxis 标签的条形图,如下所示

看来您使用的是旧教程!因为 swift 3 即将到来,这些图表的开发人员更改了库.. 根据他们,我们将不得不使用特殊的格式化程序来设置例如 X 轴类型的字符串值。所以现在你有了只接受一个参数而不是两个参数的方法:

 let barChartData = BarChartData(dataSet: chartDataSet)
 let lineChartData = LineChartData(dataSet: lineChartDataSet)

您可以在此处找到更多信息: https://github.com/danielgindi/Charts/issues/1340

好的,下面是折线图的示例函数:

  func setLineChart(dataPoints: [Double], chartInfo: String, chartDescription: String) {

    let formatter:ChartFormatter = ChartFormatter()
    let xaxis:XAxis = XAxis()

    var dataEntries: [ChartDataEntry] = Array()

    for i in 0..<dataPoints.count {
        let dataEntry = ChartDataEntry(x: Double(i), y: dataPoints[i])
        dataEntries.append(dataEntry)
        formatter.stringForValue(Double(i), axis: xaxis)
    }

    let lineChartDataSet = LineChartDataSet(values: dataEntries, label: chartInfo)
    let lineChartData = LineChartData(dataSet: lineChartDataSet)

    xaxis.valueFormatter = formatter
    lineChartView.xAxis.valueFormatter = xaxis.valueFormatter

    lineChartDataSet.mode = .CubicBezier
    lineChartDataSet.drawCirclesEnabled = false

    lineChartView.descriptionText = chartDescription
    lineChartView.data = lineChartData
    }

这是格式化程序:

    @objc(ChartFormatter)
    public class ChartFormatter: NSObject, IAxisValueFormatter{

       var days: [String] = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]

       public func stringForValue(value: Double, axis: AxisBase?) -> String{
       return days[Int(value)]
}
}

最后调用函数:

  override func viewDidLoad() {
    super.viewDidLoad()

       let values: [Double] = [1.0, 4.0, 1.5, 1.4, 1.3, 1.0, 3.0]
       let chartInfo = "chart info"
       let chartDescription = "chart description"

       self.setLineChart(values, chartInfo: chartInfo, chartDescription: chartDescription
}

所以最后你会得到这样的东西: