使用@danielgindi的Charts框架时折线图数据无法显示求助
解决Charts框架从CombinedChart转LineChart后数据不显示的问题
我之前改这个框架的示例代码时也踩过一模一样的坑!从CombinedChartViewController改成纯折线图,光替换数据类型肯定不够,还有几个关键细节要调整,给你列出来:
先检查ChartView的类型是否匹配
原来的示例用的是CombinedChartView,如果要做纯折线图,必须把视图类型改成LineChartView——哪怕你给CombinedChartView塞LineChartData,它也没法正确渲染,因为它的内部逻辑是为多类型组合设计的。比如把IBOutlet的类型改过来:// 原来的代码 @IBOutlet weak var chartView: CombinedChartView! // 改成 @IBOutlet weak var chartView: LineChartView!确认LineChartData的配置没有遗漏
示例里的CombinedChart可能把数据样式配置分散在组合设置里,转成LineChart后要确保你的LineChartDataSet是完整配置的,比如线条颜色、宽度、圆点显示这些,不然数据可能存在但看不见:// 构建折线数据集 let dataEntries = yourDataArray.map { ChartDataEntry(x: $0.xValue, y: $0.yValue) } let lineDataSet = LineChartDataSet(entries: dataEntries, label: "统计数据") // 关键样式配置,缺一可能导致看不见 lineDataSet.setColor(.systemBlue) lineDataSet.lineWidth = 2.0 lineDataSet.drawCirclesEnabled = true lineDataSet.circleRadius = 3.0 lineDataSet.circleColor = .systemBlue // 组装成LineChartData let lineData = LineChartData(dataSet: lineDataSet) chartView.data = lineData如果坚持用CombinedChartView(不推荐),要禁用其他图表类型
要是你不想改视图类型,只想在CombinedChart里只显示折线,那不能直接给chartView.data赋值LineChartData,得继续用CombinedChartData,然后把其他类型的数据设为nil,同时启用折线图、禁用其他:let combinedData = CombinedChartData() combinedData.lineData = lineData // 你的LineChartData // 把不需要的类型都设为nil combinedData.barData = nil combinedData.pieData = nil combinedData.bubbleData = nil // 启用折线,禁用其他 chartView.drawLineChartEnabled = true chartView.drawBarChartEnabled = false chartView.drawPieChartEnabled = false // 最后赋值给chartView chartView.data = combinedData最后别忘了刷新图表状态
替换数据后手动触发刷新,避免因为视图缓存导致不显示:chartView.notifyDataSetChanged() chartView.setNeedsDisplay()
最容易踩的坑就是视图类型没改,导致数据塞进去了但框架没法正确渲染,先把这个检查了应该就能解决问题!
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

