iOS Charts中X轴数值重复而不是替换

4
轴上的数值似乎是重复的,而不是被替换的,如下面的截图所示,应该绘制“Jan”、“Feb”、“Mar”、“Apr”、“May”、“Jun”,而不是模拟器中的结果。

enter image description here

这里是代码。
class ViewController: UIViewController {

    @IBOutlet weak var chartContainer: LineChartView!
    let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
    let unitsSold = [20.0, 4.0, 6.0, 3.0, 12.0, 3.0]


    override func viewDidLoad() {
        super.viewDidLoad()


        setChart(dataPoints: months, values: unitsSold)



    }

    func setChart(dataPoints: [String], values: [Double]) {

        // Set up x axis
        let xaxis = XAxis()
        let chartFormatter = ChartFormatter(myArr: months)

        // Array for entries
        var dataEntries: [ChartDataEntry] = []

        // Add new data entries
        for i in 0..<dataPoints.count {

            let dataEntry = ChartDataEntry(x: Double(i) , y: values[i], data: "a" as AnyObject? )

            dataEntries.append(dataEntry)
            chartFormatter.stringForValue(Double(i), axis: xaxis)
        }

        xaxis.valueFormatter = chartFormatter
        chartContainer.xAxis.valueFormatter = xaxis.valueFormatter

        // Configure the dataset
        let lineChartDataSet = LineChartDataSet(values: dataEntries, label: "Units Sold")
        let lineChartData = LineChartData(dataSet: lineChartDataSet)




        chartContainer.data = lineChartData



    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

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

    private var myArr: [String]!

    init(myArr: [String]) {


        self.myArr = myArr
    }

    func stringForValue(_ value: Double, axis: AxisBase?) -> String {

        return myArr[Int(value)]
    }
}

这只是我的猜测,因为我不熟悉ChartFormatter,但它“感觉像”一个舍入误差。您能否使用调试器验证stringForValue()确实按顺序获取值0、1、2等,并将其与myArr[]中的适当值相关联? - Yohst
@Yohst 不更改 x 轴的值为小数点。 - Tunds
1个回答

6
我通过添加

解决了这个问题。

   chartContainer.xAxis.granularityEnabled = true
   chartContainer.xAxis.granularity = 1.0

太好了!所以你的数字确实是四舍五入的;-) - Yohst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接