当集合使用不同的 X 坐标范围时,iOS 图表将不会绘制多个数据集

问题描述 投票:0回答:2

当从多个数据集创建折线图时,折线图仅显示其中一个数据集,并且当缩放或平移图表时,它会崩溃并显示致命错误:无法使用 upperBound 形成范围< lowerBound

如果我从一个数据集创建折线图,它会按预期工作。

仅当两个数据集的 X 值范围完全不同时,才会出现此问题。

下面的代码应该绘制一个 x 范围从 0 到 19 的图表(即 2 个数据集)。但它只绘制第二个数据集。如果平移或缩放图表,图表会崩溃。

如果我编辑代码,将

for x in (10..<20)
替换为
for x in (0..<10)
,两个数据集都会正确绘制,并且图表不会崩溃。

总结一下:当添加两个具有不同 X 坐标范围的条目的数据集时,图表绘制不正确并且会崩溃。

是否需要调用 iOS_charts API 来防止这种情况发生?如何绘制两个 X 坐标不重叠的数据集?

如果我修改它以创建具有不重叠 x 坐标的多个数据集,则使用 此演示代码运行代码时会产生相同的崩溃。

class ElevationChartViewController: UIViewController {
   
    @IBOutlet var chartView: LineChartView!
    
    override func viewDidLoad() {
        super.viewDidLoad()

        chartView.backgroundColor = .white
        chartView.legend.enabled = false
        chartView.maxVisibleCount = 20000
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        let dataSets = createChartDataSets()
        chartView.data = LineChartData(dataSets: dataSets)
    }
}

func createChartDataSets() -> [LineChartDataSet] {
      var dataSets = [LineChartDataSet]()
      var entriesOne = [ChartDataEntry]()
      var entriesTwo = [ChartDataEntry]()
      var y = 0.0
      for x in (0..<10) {
          entriesOne.append( ChartDataEntry(x: Double(x), y: y))
          y = y + 10
          if y > 60 {y = 0.0}
      }
      dataSets.append(LineChartDataSet(entriesOne))
      
      for x in (10..<20) {
          entriesTwo.append( ChartDataEntry(x: Double(x), y: y))
          y = y + 10
          if y > 50 {y = 0.0}
      }
      dataSets.append(LineChartDataSet(entriesTwo))

      return dataSets
}

斯威夫特版本:5.4 Xcode 12.4 观察到在真实的 iPhone 12 SW 版本 14.4 上运行 图表 v4.0.1

ios-charts
2个回答
5
投票

我一直面临类似的问题,到目前为止,这个解决方案对我有用。不确定由此可能产生的潜在副作用。我还没有测试过平移或缩放。

子类

LineChartDataSet
并覆盖
entryIndex(x xValue:closestToY  yValue:rounding)
复制并粘贴超级实现,但删除函数顶部的
guard
语句

    var closest = partitioningIndex { $0.x >= xValue }
    guard closest < endIndex else { return -1 }

并替换为

    var closest = partitioningIndex { $0.x >= xValue }
    if closest >= endIndex {
      closest = endIndex - 1
    }

0
投票

Charts 标签 5.0.0 (https://github.com/danielgindi/Charts) 没有 4.1.0 版本存在的问题,如本期所述。

© www.soinside.com 2019 - 2024. All rights reserved.