嗨,我需要一个附加的ios图表。我正在使用ios-Chart库(MPAndroidChart的swift替代品)来实现swift。我已经设法使用散点图在图上获得了这些点。但我不知道如何连接这两个垂直点。任何帮助或早期响应都将是值得感谢的。
我当前的代码是:
func drawChart(dataPoints:[String] , value1 :[Double] , value2:[Double])
{
var dataEntries1:[ChartDataEntry] = []
for i in 0..<dataPoints.count {
let dataEntry = ChartDataEntry(value:value1[i] , xIndex : i)
dataEntries1.append(dataEntry)
}
var dataEntries2:[ChartDataEntry] = []
for i in 0..<dataPoints.count {
let dataEntry = ChartDataEntry(value:value2[i] , xIndex : i)
dataEntries2.append(dataEntry)
}
let dataSet1 = ScatterChartDataSet(yVals: dataEntries1, label: "Value1" )
dataSet1 .setColor(UIColor.blueColor())
let dataSet2 = ScatterChartDataSet(yVals: dataEntries2 ,label: "Value2")
dataSet2.setColor(UIColor.greenColor())
var bloodPressureDataSets = [ScatterChartDataSet]()
bloodPressureDataSets.append(dataSet1)
bloodPressureDataSets.append(dataSet2)
let barChartData = ScatterChartData(xVals: dataPoints, dataSets: bloodPressureDataSets)
bpChart.xAxis.labelPosition = .Bottom
bpChart.rightAxis.enabled=false
//barChart.legend.enabled=false
bpChart.descriptionText=""
bpChart.data = barChartData
}目前,我可以使用上面的代码看到这种类型的图形。

我想把这两个垂直点连接起来,如下图所示,

发布于 2015-11-11 18:32:28
看看散点图渲染器,drawDataSet函数。你可以把这些点连在一起
更新您的评论:
首先,转到ScatterChartRenderer并定位到
internal func drawDataSet(context context: CGContext, dataSet: ScatterChartDataSet)
这是我们计算位置并绘制形状的地方
有一个主循环:
for (var j = 0, count = Int(min(ceil(CGFloat(entries.count) * _animator.phaseX), CGFloat(entries.count))); j < count; j++)
{
let e = entries[j]
point.x = CGFloat(e.xIndex)
point.y = CGFloat(e.value) * phaseY
point = CGPointApplyAffineTransform(point, valueToPixelMatrix);
...
}这是您在dataSet中提供的数据条目的迭代,我们只在这里获得xIndex和y值,并将其转换为屏幕上的坐标。
所以你能做的就是子类化这个渲染器,覆盖这个函数来得到你想要的东西。
例如,你想连接同一个xIndex的数据条目(点),你应该首先迭代每个数据集来收集同一xIndex上的所有条目,使用CGPointApplyAffineTransform(point, valueToPixelMatrix)进行转换,并使用CoreGraphics API来绘制直线。你不需要担心数学问题,这个库已经提供了在数据值和屏幕坐标值之间进行转换的API。你只需专注于如何绘制图表即可。
https://stackoverflow.com/questions/33627961
复制相似问题