gpt4 book ai didi

ios - 如何使用CorePlot框架和swift 3制作折线图?

转载 作者:行者123 更新时间:2023-11-30 12:09:35 25 4
gpt4 key购买 nike

我无法理解如何使用 CorePlot 2.2 和 Swift 3(Xcode 8、iOS 10)制作线图。

谁能解释一下怎么做吗?

特别是,我不明白最后一个函数 numbers (第 97-103 行(最后几行))的工作原理:

    import UIKit
import CorePlot

class dottedLine: UIViewController {
@IBOutlet var hostView: CPTGraphHostingView!

var plot: CPTScatterPlot!


override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
initPlot()
}



let xValues: [NSNumber] = [1,2,3,4]
let yValues: [NSNumber] = [1,5,4,3]

func initPlot() {
configureHostView()
configureGraph()
configureChart()
configureAxes()
}

func configureHostView() {
hostView.allowPinchScaling = false
}

func configureGraph() {
// 1 - Create the graph
let graph = CPTXYGraph(frame: hostView.bounds)
graph.plotAreaFrame?.masksToBorder = false
hostView.hostedGraph = graph

// 2 - Configure the graph
//graph.apply(CPTTheme(named: CPTThemeName.plainWhiteTheme))
//graph.fill = CPTFill(color: CPTColor.clear())
graph.paddingBottom = 30.0
graph.paddingLeft = 30.0
graph.paddingTop = 0.0
graph.paddingRight = 0.0


// 3 - Set up styles
let titleStyle = CPTMutableTextStyle()
titleStyle.color = CPTColor.black()
titleStyle.fontName = "HelveticaNeue-Bold"
titleStyle.fontSize = 16.0
titleStyle.textAlignment = .center
graph.titleTextStyle = titleStyle

let title = "Just title"
graph.title = title
graph.titlePlotAreaFrameAnchor = .top
graph.titleDisplacement = CGPoint(x: 0.0, y: -16.0)

// 4 - Set up plot space
let xMin = 0.0
let xMax = 5.0
let yMin = 0.0
let yMax = 15.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))
}

func configureChart() {
// 1 - Set up the plot
plot = CPTScatterPlot()

// 2 - Set up style
let plotLineStile = CPTMutableLineStyle()
plotLineStile.lineWidth = 1
plotLineStile.lineColor = CPTColor.black()
plot.dataLineStyle = plotLineStile

// 3- Add plots to graph
guard let graph = hostView.hostedGraph else { return }
plot.dataSource = self
plot.delegate = self
graph.add(plot, to: graph.defaultPlotSpace)
}

func configureAxes() {
}
}



extension dottedLine: CPTScatterPlotDataSource, CPTScatterPlotDelegate {
func numberOfRecords(for plot: CPTPlot) -> UInt {
// number of points
return UInt(xValues.count)
}

func scatterPlot(_ plot: CPTScatterPlot, plotSymbolWasSelectedAtRecord idx: UInt, with event: UIEvent) {
}

/* func numbers(for plot: CPTPlot, field fieldEnum: UInt, recordIndexRange indexRange: NSRange) -> [Any]? {
print("xxxxxxx")
switch CPTScatterPlotField(rawValue: Int(fieldEnum))! {
case .X:
return xValues[index] as NSNumber

case .Y:
return yValues[indexRange] as NSNumber
}

} */

/* func symbols(for plot: CPTScatterPlot, recordIndexRange indexRange: NSRange) -> [CPTPlotSymbol]? {
return xValues
} */

func number(for plot: CPTPlot, field: UInt, record: UInt) -> Any? {


switch CPTScatterPlotField(rawValue: Int(field))! {
case .X:
return 2 as NSNumber

case .Y:
return 3 as NSNumber
}
}
}

最佳答案

对于散点图,此方法将针对每个索引处的 x 值调用一次,针对 y 值调用一次。

这是来自 DatePlot 示例应用程序的方法:

func number(for plot: CPTPlot, field: UInt, record: UInt) -> Any?
{
switch CPTScatterPlotField(rawValue: Int(field))! {
case .X:
return (oneDay * Double(record)) as NSNumber

case .Y:
return self.plotData[Int(record)] as NSNumber
}
}

关于ios - 如何使用CorePlot框架和swift 3制作折线图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46245076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com