2013-11-25 58 views
1

我想在描述動畫散點圖: How to add animation to scatter graph using core plot?使CPTScatterPlot動畫一次繪製一個點。附加線原點

但我在那裏遇到一個額外的線被吸引到零點的問題。這裏是我的問題的圖像:

http://i.stack.imgur.com/OizxH.png

我發現了Coreplot谷歌組的主題描述了同樣的問題: https://groups.google.com/forum/#!searchin/coreplot-discuss/reloadDataInIndexRange/coreplot-discuss/ACpzO9neSsI/sgpv9UE4Xg0J

我試圖實現這是有描述的修補程序,但問題依然存在。這裏是我的代碼:

- (void) updateData 
{ 
    _count = 0; 
    [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(animateGraph:) userInfo:nil repeats:YES]; 
} 

- (void)animateGraph:(NSTimer *)timer 
{ 
    if (_count < PREDICT_MINUTES) { 
     [[self.graph plotWithIdentifier:@"estimatedBGPlot"] reloadDataInIndexRange:NSMakeRange(_count, 1)]; 
    } else { 
     [timer invalidate]; 
    } 
    _count += 1; 
} 

這是我設置的圖形做:

//Make the boundaries of the graph and hosting view the size of the containing view. 
self.graph = [[CPTXYGraph alloc] initWithFrame:CGRectMake(0, 0, 320, 250)]; 
CPTGraphHostingView *hostingView = [[CPTGraphHostingView alloc] initWithFrame:CGRectMake(0, 0, 320, 250)]; 
[self.view addSubview:hostingView]; 

hostingView.hostedGraph = self.graph; 
hostingView.collapsesLayers = NO; 

//Pad the plot area. This ensures that the tick marks and labels 
//will show up as is appropriate. 
self.graph.plotAreaFrame.paddingBottom = 30.0; 
self.graph.paddingBottom = 0.0; 
self.graph.paddingTop = 0.0; 
self.graph.paddingLeft = 0.0; 
self.graph.paddingRight = 0.0; 

//This is shared by all graphs in the plotSpace. 
//It sets the coordinates of the axes 
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; 
plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0) 
               length:CPTDecimalFromFloat(PREDICT_MINUTES)]; 
plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0) length:CPTDecimalFromFloat(300)]; 

CPTXYAxisSet *axisSet = (CPTXYAxisSet *)self.graph.axisSet; 
CPTXYAxis *x = axisSet.xAxis; 
CPTXYAxis *y = axisSet.yAxis; 
x.orthogonalCoordinateDecimal = CPTDecimalFromFloat(0); 
y.orthogonalCoordinateDecimal = CPTDecimalFromFloat(0); 

CPTMutableLineStyle *clearStyle = [CPTMutableLineStyle lineStyle]; 
clearStyle.lineColor = [CPTColor clearColor]; 

CPTMutableLineStyle *thickWhiteStyle = [CPTMutableLineStyle lineStyle]; 
thickWhiteStyle.lineColor = [CPTColor whiteColor]; 
thickWhiteStyle.lineWidth = 2.0f; 

x.majorIntervalLength = [[NSNumber numberWithInt:30] decimalValue]; 
x.minorTicksPerInterval = 1; 
x.majorTickLineStyle = thickWhiteStyle; 
x.minorTickLineStyle = clearStyle; 
x.axisLineStyle = clearStyle; 
x.minorTickLength = 5.0f; 
x.majorTickLength = 7.0f; 
x.labelOffset = 3.0f; 

x.labelingPolicy = CPTAxisLabelingPolicyNone; 
CPTScatterPlot* estimatedBGPlot = [[CPTScatterPlot alloc] initWithFrame:self.graph.defaultPlotSpace.accessibilityFrame]; 
estimatedBGPlot.identifier = @"estimatedBGPlot"; 
estimatedBGPlot.interpolation = CPTScatterPlotInterpolationCurved; 
CPTMutableLineStyle *ls1 = [CPTMutableLineStyle lineStyle]; 
ls1.lineWidth = 4.0f; 
ls1.lineColor = [CPTColor whiteColor]; 
estimatedBGPlot.dataLineStyle = ls1; 
estimatedBGPlot.dataSource = self; 
[self.graph addPlot:estimatedBGPlot]; 

CPTScatterPlot* predictPlot = [[CPTScatterPlot alloc] initWithFrame:self.graph.defaultPlotSpace.accessibilityFrame]; 
predictPlot.identifier = @"predictPlot"; 
predictPlot.interpolation = CPTScatterPlotInterpolationCurved; 
CPTMutableLineStyle *ls2 = [CPTMutableLineStyle lineStyle]; 
ls2.lineWidth = 3.0f; 
ls2.lineColor = [CPTColor greenColor]; 
ls2.dashPattern=[NSArray arrayWithObjects:[NSDecimalNumber numberWithInt:5],[NSDecimalNumber numberWithInt:5],nil]; 
predictPlot.dataLineStyle = ls2; 
predictPlot.dataSource = self; 
[self.graph addPlot:predictPlot]; 
+0

從'-numberOfRecordsForPlot返回什麼樣的價值:'?它是否返回大於'_count'的值? –

+0

是的,numberOfRecordsForPlot總是大於_count。我正在嘗試繪製可用點的子集。當我NSLog時,numberOfRecordsForPlot返回了580,而_count一直遞增到180.圖上的x範圍是從0到180.如果用戶向左滑動,我希望能夠擴展這個範圍。直到最終達到580.但現在我只是繪製了前180個值。 – user3030055

回答

0

使用埃裏克的建議,我適應我的方法-numberOfRecordsForPlot:所以,它沒有返回值這比在任何時刻繪製的數字記錄都要大。

單詞_count令人困惑,它應該像'_index'這實際上是一個比計數少。

這是我的最後一個方法

-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot { 
    return _count + 1; 
}