使用核心图

时间:2016-10-30 09:48:06

标签: swift graph core-plot

我正在使用散点图在x轴上绘制线条和自定义标签。我希望一些线条准确地从y轴开始,一些形式自定义标签location.PFA图像。enter image description here

控制线应该从y轴开始,应该直到" Sat"数据线应该从#34; Sun"并且应该画到周六"周四"。 任何人都可以帮助我实现这个目标

编辑1: - 正如Eric所建议的那样,对于控制线和数据线尝试了2条记录,对于Plot x,我将返回x轴的ticklocation数组,对于绘图y,我将返回图形的y值。通过这样做控制线是正确的,但数据线总是从零开始。 PFA附加图片enter image description here

以下是我在编写用于在x轴上创建标签的代码

if(self.axisArray.count == 7) {
                tickLocation = [1, 2, 3, 4, 5, 6, 7]
            }
            else {
                tickLocation = [1, 2, 3, 4, 5, 6, 7, 8]
            }

            var xLocations = [NSNumber]()
            var labelLocation: Int = -1
            for number in tickLocation {
                labelLocation += 1
                let newLabel = CPTAxisLabel.init(text: axisArray[labelLocation] as? String, textStyle: axisLabelStyle)
                newLabel.tickLocation = number as! NSNumber
                newLabel.offset = x.labelOffset + x.majorTickLength
                xLocations.append(NSNumber(value: number as! Double))
                customLabel.append(newLabel)
            }
            x.labelingPolicy = CPTAxisLabelingPolicy.none
            x.axisLabels = Set(customLabel)
            x.majorTickLocations = Set(xLocations)

以下数据源是代码

func numberOfRecords(for plot: CPTPlot) -> UInt
    {
        if(plot.identifier as! String == BloodGlucoseGraphView.kUpperControlLineIdentifier) {
            return UInt(2)
        }
        else if(plot.identifier as! String == BloodGlucoseGraphView.kLowerControlLineIdentifier) {
            return UInt(2)
        }
        else if(plot.identifier as! String == BloodGlucoseGraphView.kFirstGraphIdentfifier) {
           return UInt(self.beforeMealData.count)
        }
        else if(plot.identifier as! String == BloodGlucoseGraphView.kSecondGraphIdentfifier) {
            return UInt(self.afterMealData.count)
        }
        else {
            return UInt(0)
        }
    }

    func number(for plot: CPTPlot, field: UInt, record: UInt) -> Any?
    {
        let plotField = CPTScatterPlotField(rawValue: Int(field))
        if(plot.identifier as! String == BloodGlucoseGraphView.kUpperControlLineIdentifier) {
            if(plotField == .X) {
                    return Int(record)
            }
            else if(plotField == .Y) {
                    return 6
            }
        }
        else if(plot.identifier as! String == BloodGlucoseGraphView.kLowerControlLineIdentifier) {
            if(plotField == .X) {
                return Int(record)
            }
            else if(plotField == .Y) {
                    return 5.2
            }
        }
            if(plot.identifier as! String == BloodGlucoseGraphView.kFirstGraphIdentfifier) {
                if(plotField == .X) {
                    return self.tickLocation[Int(record)] as! NSNumber
                }
                else if(plotField == .Y) {
                    return self.afterMealData[Int(record)]
                }
            }
            else if(plot.identifier as! String == BloodGlucoseGraphView.kSecondGraphIdentfifier) {
                if(plotField == .X) {
                    return self.tickLocation[Int(record)] as! NSNumber
                }
                else if(plotField == .Y) {
                    return self.beforeMealData[Int(record)]
                }
            }
        return nil
    }

但是,数据线也从0开始而不是形式" Sun"。 @Eric你可以帮我这方面吗

1 个答案:

答案 0 :(得分:0)

对于数据行,请确保从数据源返回的x值与相应x轴标签的刻度位置匹配。从图片中看,它看起来像是一个一个错误。

对于控制线,这些只需要两个数据点,每个数据点对应一行。左侧点应具有绘图空间location的{​​{1}}的x值,右侧点应具有xRange的{​​{1}}的x值。