3

嗨,我需要一个为 ios 附加的图表。我正在为 swift 使用 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

    }

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

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

在此处输入图像描述

4

1 回答 1

1

看看散点图渲染器,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 值并将其转换为屏幕上的坐标。

所以你可以做的是子类这个渲染器,覆盖这个函数来得到你想要的。

例如,您想连接同一个 xIndex 的数据条目(点),您应该首先迭代每个数据集以收集同一 xIndex 上的所有条目,CGPointApplyAffineTransform(point, valueToPixelMatrix)用于转换并使用 CoreGraphics API 绘制线。您无需担心数学问题,该库已经为您提供了在数据值和屏幕坐标值之间转换的 API。您只需专注于如何绘制图表。

于 2015-11-11T10:32:27.560 回答