ios-Charts

时间:2015-11-10 10:33:06

标签: ios ios-charts

嗨我需要附加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

    }

目前我可以使用上面的代码看到这种类型的图表。 Current Graph

我想加入这两个垂直点,如下图所示,

enter image description here

1 个答案:

答案 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。您只关注如何绘制图表。