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 实例化。 (例如 CandleStickChartRenderer
、BarChartRenderer
、LineChartRenderer
等)
不要忘记将自定义渲染器 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)
}
我想以编程方式 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 实例化。 (例如 CandleStickChartRenderer
、BarChartRenderer
、LineChartRenderer
等)
不要忘记将自定义渲染器 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)
}