Как добавить значения в мой график в core plot swift?

#ios #swift #plot #core-plot #math-functions

Вопрос:

         let graph = CPTXYGraph(frame: hostview.bounds)
        hostview.hostedGraph = graph
        graph.paddingLeft = 0.0
        graph.paddingTop = 0.0
        graph.paddingRight = 0.0
        graph.paddingBottom = 0.0
        graph.axisSet = nil
 

Пока что это мой код. Я хотел бы построить функцию. в этом случае значением функции должно быть f(x) = x^2 10. Я хочу, чтобы оси x и y начинались с 0 и заканчивались на 100.

Может ли кто-нибудь помочь мне с реализацией этого f(x)?

Ответ №1:

Ваша логика инициализации графика должна выглядеть следующим образом. Используйте это в viewDidLoad

 func initPlot() {
    let graph = CPTXYGraph(frame: hostView.bounds)
    graph.plotAreaFrame?.masksToBorder = false
    hostView.hostedGraph = graph
    graph.backgroundColor = UIColor.white.cgColor
    graph.paddingBottom = 40.0
    graph.paddingLeft = 40.0
    graph.paddingTop = 40.0
    graph.paddingRight = 40.0

    //configure title
    let title = "f(x) = x*x   10"
    graph.title = title
    
    //configure axes
    let axisSet = graph.axisSet as! CPTXYAxisSet

    if let x = axisSet.xAxis {
        x.majorIntervalLength   = 20
        x.minorTicksPerInterval = 1
    }

    if let y = axisSet.yAxis {
        y.majorIntervalLength   = 5
        y.minorTicksPerInterval = 5
    }

    let xMin = 0.0
    let xMax = 100.0
    let yMin = 0.0
    let yMax = 100.0
    guard let plotSpace = graph.defaultPlotSpace as? CPTXYPlotSpace else { return }
    plotSpace.xRange = CPTPlotRange(locationDecimal: CPTDecimalFromDouble(xMin), lengthDecimal: CPTDecimalFromDouble(xMax - xMin))
    plotSpace.yRange = CPTPlotRange(locationDecimal: CPTDecimalFromDouble(yMin), lengthDecimal: CPTDecimalFromDouble(yMax - yMin))
    
    //create the plot
    plot = CPTScatterPlot()
    plot.dataSource = self
    graph.add(plot, to: graph.defaultPlotSpace)
}
 

Кроме того , вам необходимо реализовать CPTScatterPlotDataSource , где вы определяете numberOfRecords соответствующие X Y значения и и

 extension ViewController: CPTScatterPlotDataSource {
    func numberOfRecords(for plot: CPTPlot) -> UInt {
        return 100
    }
    
    func number(for plot: CPTPlot, field: UInt, record: UInt) -> Any? {
        switch CPTScatterPlotField(rawValue: Int(field))! {
        case .X:
            return record
        case .Y:
            return (record * record)   10
        default:
            return 0
        }
    }
}
 

введите описание изображения здесь

Комментарии:

1. Есть ли хороший способ создать функцию, которая принимает два входных параметра? Он должен иметь вид f(x) = a * x^2 c, где пользователь должен иметь возможность устанавливать значения для a и c. Есть какие-нибудь идеи? Спасибо вам за ваш ответ, очень помог.

2. Рад, что этот ответ вам помог :). Вы можете определить две переменные для a и c в ViewController и использовать их внутри метода делегирования CPTScatterPlotDataSource, например, a * (запись * запись) c. Не могли бы вы, пожалуйста, озвучить ответ, если это вам помогло. Если это решило вашу проблему, пожалуйста, примите ответ.

3. Я пока не могу поднять голос. Мне нужно больше репутации.

4. Не беспокойтесь. спасибо, что согласились