一张图表上具有不同点数的多个数据集(iOS-图表)
Multiple datasets with different number of points on one chart (iOS-Charts)
我在使用 iOS 图表时遇到问题,当我尝试将两条线放在具有不同数据点数量的同一图表上时。我在下面粘贴了我的测试代码。
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
这是生成的图表:
如您所见,dataset2 的八月条目显示为七月。我试图为 dataset2 的 July 值添加一个额外的 nil 值,但这不起作用。我如何让它正确显示?
你误解了它的工作原理。每个 xIndex 都有它的值,称为 dataEntry。您首先创建两个系列的 7 个值,但最后您扩大了 xAxis。 ios-charts 使用 xIndex 来跟踪应该在哪里绘制值,而不是标签。在您的数据集中,Aug 和 Jul 标签都位于 xIndex:6。这就是为什么你看到它们都是在七月绘制的,因为它的 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],而不是在创建 dataEntry 时是 [0,1,2,3,4,5,6]。
我在使用 iOS 图表时遇到问题,当我尝试将两条线放在具有不同数据点数量的同一图表上时。我在下面粘贴了我的测试代码。
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
这是生成的图表:
如您所见,dataset2 的八月条目显示为七月。我试图为 dataset2 的 July 值添加一个额外的 nil 值,但这不起作用。我如何让它正确显示?
你误解了它的工作原理。每个 xIndex 都有它的值,称为 dataEntry。您首先创建两个系列的 7 个值,但最后您扩大了 xAxis。 ios-charts 使用 xIndex 来跟踪应该在哪里绘制值,而不是标签。在您的数据集中,Aug 和 Jul 标签都位于 xIndex:6。这就是为什么你看到它们都是在七月绘制的,因为它的 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],而不是在创建 dataEntry 时是 [0,1,2,3,4,5,6]。