嗨我需要附加ios的图表。我正在使用ios-Chart库(快速替代MPAndroidChart)来实现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
}
我想加入这两个垂直点,如下图所示,
答案 0 :(得分:0)
看看散点图渲染器,drawDataSet func。你可以在那里连接点
更新你的意见:
首先,转到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值并将其转换为屏幕上的坐标。
所以你能做的就是给这个渲染器子类,重写这个函数来得到你想要的东西。
e.g。您想要连接相同xIndex的数据条目(点),您应该首先迭代每个数据集以收集相同xIndex上的所有条目,使用CGPointApplyAffineTransform(point, valueToPixelMatrix)
转换并使用CoreGraphics API绘制线。您无需担心数学,库已经为您提供了在数据值和屏幕坐标值之间进行转换的API。您只关注如何绘制图表。