首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ios-Charts中的散点图+折线图

ios-Charts中的散点图+折线图
EN

Stack Overflow用户
提问于 2015-11-10 18:33:06
回答 1查看 2.2K关注 0票数 3

嗨,我需要一个附加的ios图表。我正在使用ios-Chart库(MPAndroidChart的swift替代品)来实现swift。我已经设法使用散点图在图上获得了这些点。但我不知道如何连接这两个垂直点。任何帮助或早期响应都将是值得感谢的。

我当前的代码是:

代码语言:javascript
复制
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

    }

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

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

EN

回答 1

Stack Overflow用户

发布于 2015-11-11 18:32:28

看看散点图渲染器,drawDataSet函数。你可以把这些点连在一起

更新您的评论:

首先,转到ScatterChartRenderer并定位到

internal func drawDataSet(context context: CGContext, dataSet: ScatterChartDataSet)

这是我们计算位置并绘制形状的地方

有一个主循环:

代码语言:javascript
复制
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。你只需专注于如何绘制图表即可。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33627961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档