我目前正在使用CorePlot库(版本2.1)绘制散点图的iOS应用程序中工作。我的散点图绘制得很好,在下一步中,我想绘制一个半透明的置信椭圆图。我写了一个计算椭圆的主轴和副轴以及所需的旋转角度的类。 My ConfidenceEllipse类实现了一个getPath()方法,该方法返回一个表示要绘制的椭圆的CGPath。在散点图上绘制置信椭圆
func getPath() -> CGPath
{
var ellipse: CGPath
var transform = CGAffineTransformIdentity
transform = CGAffineTransformTranslate (transform, CGFloat(-self.meanX), CGFloat(-self.meanY))
transform = CGAffineTransformRotate (transform, CGFloat(self.angle))
transform = CGAffineTransformTranslate (transform, CGFloat(self.meanX), CGFloat(self.meanY))
ellipse = CGPathCreateWithEllipseInRect(CGRectMake (CGFloat(-self.mainHalfAxis), CGFloat(-self.minorHalfAxis), CGFloat(2 * self.mainHalfAxis), CGFloat(2 * self.minorHalfAxis)),&transform)
return ellipse
}
搜索网站一段时间后,似乎注解是要走的路,所以我想这:
let graph = hostView.hostedGraph!
let space = graph.defaultPlotSpace
let ellipse = ConfidenceEllipse(chiSquare: 5.991)
ellipse.analyze(self.samples)
let annotation = CPTPlotSpaceAnnotation (plotSpace: space!, anchorPlotPoint: [0,0])
let overlay = CPTBorderedLayer (frame: graph.frame)
overlay.outerBorderPath = ellipse.getPath()
let fillColor = CPTColor.yellowColor()
overlay.fill = CPTFill (color: fillColor)
annotation.contentLayer = overlay
annotation.contentLayer?.opacity = 0.5
graph.addAnnotation(annotation)
这样做,会给我下面 Screenshot 正如你可以看到,叠加层占据了整个框架的大小,这似乎是合乎逻辑的,因为在创建对象时我通过了框架的尺寸。我也尝试将构造函数留空,但覆盖层完全不显示。所以我想知道,有什么我在这里失踪?
你说得对,我忘了缩放椭圆形。我尝试使用绘图区域和椭圆的边界初始化边界注记,稍后缩放边界注释,以便它完全覆盖散点图上带点的区域,但不幸的是,椭圆仍然不显示。注释仍然显示为矩形。你认为我设置outerBorderPath是罪魁祸首吗?这发生在阅读以下帖子后http://stackoverflow.com/questions/11588862/changing-the-layer-shape-for-cptplotspaceannotation。 – Neckelatius