2013-04-28 2 views
0

코어 플롯 그래프 최적화에 대한 질문이 있습니다. y = 8 * sin (x) 함수를 플롯하려는 경우 구문 분석을 사용하고 범위 값을 가져옵니다 (예 : 5, + 5)를 계산 한 후에 그래프를 그립니다. 플롯을 위아래로 드래그하면 불필요한 값이 적용되므로 제거 할 수 있습니다. 그러면 더 좋은 선을 표시 할 수있는 가시 범위의 일부 지점을 추가 할 수 있습니다.코어 플롯 데이터 소스 - 문제

이제 더 많은 간격의 데이터 소스가 있습니다.이 간격의 y 값이 3 인 배열 : -5, -2 0,3 1 4,5 (이 숫자는 예를 들어)입니다. 내 플롯보기에이 라인을 그릴 수있는 방법,이 같은 일부 코드를 추가해야합니다

CPTScatterPlot *xSquaredPlot = [[CPTScatterPlot alloc] initWithFrame:graph.defaultPlotSpace.accessibilityFrame]; 
xSquaredPlot.identifier = @"Grafico"; 
xSquaredPlot.interpolation = CPTScatterPlotInterpolationLinear; 
xSquaredPlot.delegate = self; 

CPTMutableLineStyle *lineStyleFunc = [CPTMutableLineStyle lineStyle]; 
lineStyleFunc.lineWidth = 1.0f; 
lineStyleFunc.lineColor = [CPTColor redColor]; 
xSquaredPlot.dataLineStyle = lineStyleFunc; 
xSquaredPlot.dataSource = self; 

[graph addPlot:xSquaredPlot]; 

하지만 난 얼마나 줄 모르는 문제 내가, 내가 동적으로 만들어야 방법 내가 할 수 있을까? 새로운 간격의 배열을 만들 때이 코드를 추가 하시겠습니까? 하지만 데이터 소스를 업데이트해야합니까?

답변

1

코어 플롯은 가능한 경우 표시되는 플롯 영역 밖에있는 드로잉 포인트를 건너 뛰므로 데이터 소스에서 그렇게하는 것에 대해 너무 걱정할 필요가 없습니다. 사용자가 스크롤 할 때 많은 데이터 요소를 추가하거나 제거하지 않으려면 코드를 플로팅하는 데 더 많은 작업이 필요하고 느려지 게됩니다.

함수를 플로팅 했으므로 가능한 한 한 가지 방법은 가시적 인 x 범위 밖에서 약간 작은 범위로 데이터 포인트를 생성하는 것입니다. 플롯 공간 위임자를 사용하여 변경 사항을 모니터링하고 사용자가 그래프를 스크롤하거나 확대 할 때 필요에 따라 점을 추가합니다.

-insertDataAtIndex:numberOfRecords: 메서드를 사용하여 데이터 요소를 플롯에 추가합니다. 이것은 플롯이 새로운 값뿐만 아니라 모든 데이터를로드하게하는 -reloadData보다 나은 성능을가집니다.

+0

정말요? 내가 확인하려고했지만 점을 변환하는 것이 그려지는 것을 볼 수 있습니다. 아마도 ... 실수를 할 때 ... 그래프를 만들 때 X와 Y 배열을 그래프로 만듭니다. 그래서 -numberOfRecordsForPlot : 배열 수를 반환합니다. while numberForPlot : field : recordIndex : FieldX 및 FieldY에 대한 X 또는 Y 배열 값을 반환합니까? – kikko088

+0

이 메서드를 사용하려고하면 캐치되지 않은 예외 'NSInternalInconsistencyException'으로 인해 응용 프로그램이 종료됩니다. 이유 : '유효하지 않은 매개 변수가 잘못되었습니다. idx <= self.cachedDataCount', 내부 호출 - (CGPoint) plotSpace :(CPTPlotSpace *) 공간 willDisplaceBy : (CGPoint) 위치 변경 – kikko088