私は現在、CorePlotライブラリ(バージョン2.1)を使用して散布図を描いているiOSアプリケーションで作業しています。私の散布図はうまく描画され、次のステップでは、プロットの上に半透明の信頼楕円を描きたいと思います。私は主軸と副軸を計算するクラスと私の楕円の必要な回転角を書きました。私のConfidenceEllipseクラスは描画する楕円を表すCGPathを返すgetPath()メソッドを実装しています。あなたのよう私に次 Screenshot を与える、これをやって散布図の上に信頼楕円を描く
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)
:
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
}
しばらくの間、ウェブを検索した後、注釈が進むべき道であると表示されますので、私はこれを試してみましたオーバーレイはフレームのフルサイズを占めています。これは、CPTBorderedLayerオブジェクトを作成するときにフレームの寸法を渡したことを考慮すると論理的です。コンストラクタを空のままにしてみましたが、オーバーレイがまったく表示されません。だから私は不思議に思っています、私はここに欠けているものは何ですか?
あなたは正しいですが、私は楕円をスケーリング忘れてしまったのに役立ちます。私は、プロット領域と楕円の両方の境界線で境界アノテーションを初期化しようとしましたが、後で境界アノテーションをスケーリングして、散布図上の点で領域を完全にカバーしましたが、残念ながら楕円は表示されません。アノテーションはまだ長方形として表示されます。あなたはouterBorderPathを設定して私を考慮していますか?これは、次の記事http://stackoverflow.com/questions/11588862/changing-the-layer-shape-for-cptplotspaceannotationを読んだ後に私に起こりました。 – Neckelatius