2

I am having problems with iOS Charts when I try to put two lines on the same chart with a different number of data points. I've pasted my test code below.

    testLineChartView.delegate = self
    testLineChartView.xAxis.enabled = true
    testLineChartView.xAxis.labelPosition = .Bottom
    testLineChartView.rightAxis.drawLabelsEnabled = false

    var allLineChartDataSets: [LineChartDataSet] = [LineChartDataSet]()

    var dataEntries: [ChartDataEntry] = []
    let dataPoints = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"]
    let values = [18.0, 4.0, 6.0, 3.0, 12.0, 16.0, 30]
    for i in 0..<dataPoints.count {
        let dataEntry = ChartDataEntry(value: values[i], xIndex: i)
        dataEntries.append(dataEntry)
        println(dataPoints[i])
    }

    let lineChartDataSet1: LineChartDataSet = LineChartDataSet(yVals: dataEntries, label: "Temperature")
    allLineChartDataSets.append(lineChartDataSet1)


    var dataEntries2: [ChartDataEntry] = []
    let dataPoints2 = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Aug"]
    let values2 = [21.0, 5.0, 7.0, 10.0, 11.0, 18.0, 20]
    for i in 0..<dataPoints2.count {
        let dataEntry2 = ChartDataEntry(value: values2[i], xIndex: i)
        dataEntries2.append(dataEntry2)
        println(dataPoints2[i])
    }

    let lineChartDataSet2 = LineChartDataSet(yVals: dataEntries2, label: "Units Sold")
    lineChartDataSet2.setColor(UIColor.redColor())
    lineChartDataSet2.setCircleColor(UIColor.redColor())
    allLineChartDataSets.append(lineChartDataSet2)

    let allDataPoints: [String] = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug"]

     let lineChartData = LineChartData(xVals: allDataPoints, dataSets: allLineChartDataSets)

    testLineChartView.data = lineChartData

Here is the chart that is produced: enter image description here

As you can see, the August entry for dataset2 is showing as July. I tried to add an extra nil value for dataset2's July value, but that doesn't work. How do I get this to show correctly?

4

1 回答 1

4

你误解了它是如何工作的。每个 xIndex 都有自己的值,称为 dataEntry。您首先创建了两个系列的 7 个值,但最后您扩大了 xAxis。ios-charts 使用 xIndex 来跟踪它应该在哪里绘制值,而不是标签。在您的数据集中,Aug 和 Jul 标签都位于 xIndex:6。这就是为什么你看到它们都是在 7 月绘制的,因为它的 xIndex 是 6。

你应该做的是首先创建 x 值,如

let allDataPoints: [String] = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug"]表示我有 8 个 x 值,而不是 7,

然后使用它们的 xIndex 值插入您的值,如果它在特定 xIndex 处没有值则忽略并继续下一个。建议不要插入 nil 值。

例如,对于数据

let values2 = [21.0, 5.0, 7.0, 10.0, 11.0, 18.0, 20](有八月数据但没有七月数据)

创建数据条目时,每个值的 xIndex 应该是 [0,1,2,3,4,5,7],而不是 [0,1,2,3,4,5,6]。

于 2015-09-08T01:45:01.147 回答