iOS-图表:Select 以编程方式获取数据点但得到的亮点是 NAN

iOS-Chart: Select the data point programmatically but get the highLight is NAN

我想以编程方式 select 最后一个数据点并绘制渐变背景,但我得到的高光是 NAN,所以我无法获得坐标来绘制 gradient.I 使用的:

chartView.highlightValue(Highlight(x: lastEntry.x, y: lastEntry.y, dataSetIndex: 0), callDelegate: true)

到select最后一个入口,在委托函数中绘制渐变:

func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight)

但高亮是NAN然后崩溃 我也试过用"valueToPixelMatrix"的方式来获取坐标,但是结果与highlight.xPx和highlight.yPx不同, 我想问一下如何在图表视图上获得正确的数据点坐标。谢谢。

我认为您使用错误的方式来自定义突出显示。您不需要使用此委托函数进行绘图。

您需要创建自己的渲染器 class 并覆盖 drawHighlighted(context: CGContext, indices: [Highlight]) 方法。在这个地方,您将获得正确的坐标。 请记住,您需要根据图表视图的类型从正确的父 class 实例化。 (例如 CandleStickChartRendererBarChartRendererLineChartRenderer 等)

不要忘记将自定义渲染器 class 的实例设置为图表视图的渲染器 属性。

祝你好运。

你可以试试这个:

func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) {

    guard let chartDataSet = data.set else {return} // get dataSet used by chart
    guard let chartView = chartView as? LineChartView else {return}
    let transform = chartView.getTransformer(forAxis: chartDataSet.axisDependency)
    let pt = transform.pixelForValues(x: highlight.x, y: highlight.y)

    if highlightMark == nil {
      setHighlightMark() // create a custom view
      self.addSubview(highlightMark!)
    }
    let convertPt = self.convert(pt, from: chartView)
    highlightMark?.center = CGPoint(x: convertPt.x, y: convertPt.y)
  }