2012-02-16 11 views
0

coreplot散布図のx軸とエポックタイムの使用方法はありますか?これは私が使用したプロット範囲です。X軸コアプロットのエポックタイムの使用

 plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(1329375688) length:CPTDecimalFromFloat(100)]; 

ファイルからエポック値を読み取っています。

-(void)plot1{ 

    // Start with some simple sanity checks before we kick off 
    if ((self.scatterPlotView1 == nil) || (self.graphData == nil)) { 
    NSLog(@"TUTSimpleScatterPlot: Cannot initialise plot without scatterPlotView1 or data."); 
    return; 
} 

if ((self.graph != nil) ) { 
    NSLog(@"TUTSimpleScatterPlot: Graph object already exists."); 
    return; 
} 

// Create a graph object which we will use to host just one scatter plot. 

CPTTimeFormatter *dateTimeFormatterForXAxis; 

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setMaximumFractionDigits:0]; 


_graph=[[CPTXYGraph alloc] initWithFrame:CGRectMake(0,500,750,500)]; 

self.scatterPlotView1.hostedGraph = _graph; 

// Add some padding to the graph, with more at the bottom for axis labels. 
self.graph.plotAreaFrame.paddingTop = 20.0f; 
self.graph.plotAreaFrame.paddingRight = 10.0f; 
self.graph.plotAreaFrame.paddingBottom = 30.0f; 
self.graph.plotAreaFrame.paddingLeft= 35.0f; 

// Tie the graph we've created with the hosting view. 
self.scatterPlotView1.hostedGraph = self.graph; 

// If you want to use one of the default themes - apply that here. 
[self.graph applyTheme:[CPTTheme themeNamed:kCPTPlainWhiteTheme]]; 

// Create a line style that we will apply to the axis and data line. 
CPTMutableLineStyle *lineStyle = [CPTMutableLineStyle lineStyle]; 
CPTMutableLineStyle *gridStyle = [CPTMutableLineStyle lineStyle]; 
CPTMutableLineStyle *plotStyle = [CPTMutableLineStyle lineStyle]; 
lineStyle.lineColor = [CPTColor redColor]; 
lineStyle.lineWidth = 2.0f; 
gridStyle.lineColor = [CPTColor redColor]; 
gridStyle.lineWidth = 1.0f; 
plotStyle.lineColor = [CPTColor blackColor]; 
plotStyle.lineWidth = 1.0;  

// Create a text style that we will use for the axis labels. 
CPTMutableTextStyle *textStyle = [CPTMutableTextStyle textStyle]; 
textStyle.fontName = @"Helvetica"; 
textStyle.fontSize = 14; 
textStyle.color = [CPTColor blackColor]; 

// Create the plot symbol we're going to use. 
CPTPlotSymbol *plotSymbol = [CPTPlotSymbol ellipsePlotSymbol]; 
plotSymbol.lineStyle = plotStyle; 
plotSymbol.size = CGSizeMake(2.0, 2.0); 
// Setup some floats that represent the min/max values on our axis. 
float xAxisMin = 0; 
float xAxisMax = 10; 
float yAxisMin = 0; 
float yAxisMax = 100; 




// We modify the graph's plot space to setup the axis' min/max values. 
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; 
plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(1329375688) length:CPTDecimalFromFloat(500)]; 
plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(yAxisMin) length:CPTDecimalFromFloat(yAxisMax - yAxisMin)]; 

// Modify the graph's axis with a label, line style, etc. 
CPTXYAxisSet *axisSet = (CPTXYAxisSet *)self.graph.axisSet; 
axisSet.xAxis.visibleRange =[CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(yAxisMin) length:CPTDecimalFromDouble(yAxisMax)]; 
axisSet.yAxis.visibleRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(yAxisMin) length:CPTDecimalFromDouble(yAxisMax)]; 


axisSet.xAxis.title = @"Time(per sec)"; 
axisSet.xAxis.titleTextStyle = textStyle; 
axisSet.xAxis.axisLineStyle = lineStyle; 
axisSet.xAxis.titleOffset = 30.0f; 
axisSet.xAxis.majorTickLineStyle = lineStyle; 
axisSet.xAxis.minorTickLineStyle = lineStyle; 
axisSet.xAxis.majorGridLineStyle = lineStyle; 
axisSet.xAxis.minorGridLineStyle=gridStyle; 
axisSet.xAxis.gridLinesRange = axisSet.xAxis.visibleRange; 
axisSet.xAxis.labelOffset = 6.0f; 
axisSet.xAxis.majorIntervalLength = CPTDecimalFromFloat(2.0f); 
axisSet.xAxis.minorTicksPerInterval = 5; 
axisSet.xAxis.minorTickLength = 10.0f; 
axisSet.xAxis.majorTickLength = 7.0f; 
axisSet.xAxis.labelTextStyle = textStyle; 
axisSet.xAxis.labelFormatter = formatter; 



axisSet.yAxis.title = @"Uterus Ccontraction"; 
axisSet.yAxis.titleTextStyle = textStyle; 
axisSet.yAxis.titleOffset = 20.0f; 
axisSet.yAxis.axisLineStyle = lineStyle; 
axisSet.yAxis.majorTickLineStyle = lineStyle; 
axisSet.yAxis.minorTickLineStyle = lineStyle; 
axisSet.yAxis.labelTextStyle = textStyle; 
axisSet.yAxis.labelFormatter = formatter; 
axisSet.yAxis.majorGridLineStyle= lineStyle; 
axisSet.yAxis.minorGridLineStyle=gridStyle; 
axisSet.yAxis.gridLinesRange = axisSet.yAxis.visibleRange; 


axisSet.yAxis.labelOffset = 3.0f; 
axisSet.yAxis.majorIntervalLength = CPTDecimalFromFloat(10.0f); 
axisSet.yAxis.minorTicksPerInterval = 1; 
axisSet.yAxis.minorTickLength = 5.0f; 
axisSet.yAxis.majorTickLength = 7.0f; 

// Add a plot to our graph and axis. We give it an identifier so that we 
// could add multiple plots (data lines) to the same graph if necessary. 
CPTScatterPlot *plot = [[CPTScatterPlot alloc] init]; 
plot.dataSource = self; 
plot.identifier = @"mainplot"; 
plot.dataLineStyle = plotStyle; 
plot.plotSymbol = plotSymbol; 
//[self.graph reloadData]; 
[self.graph setNeedsDisplay]; 
[self.graph addPlot:plot]; 

} 


    //Delegate method that returns the number of points on the plot 
-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot 
    { 
if ([plot.identifier isEqual:@"mainplot"]) 
{ 
    return [self.graphData count]; 
} 

return 0; 
    } 


    -(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex: (NSUInteger)index 
    { 
    if ([plot.identifier isEqual:@"mainplot"]) 
     { 
    //NSValue *value = [self.graphData objectAtIndex:index]; 
    //CGPoint point = [value CGPointValue]; 

    if(self.scatterPlotView1){ 
    NSDictionary *entry = [self.graphData objectAtIndex:index]; 
    CGFloat x = [[entry objectForKey:@"X"] floatValue]; 
    CGFloat y = [[entry objectForKey:@"Y"] floatValue]; 
    CGPoint point = CGPointMake(x, y); 


    // FieldEnum determines if we return an X or Y value. 
    if (fieldEnum == CPTScatterPlotFieldX) 
    { 
     return [NSNumber numberWithFloat:point.x]; 
    } 
    else // Y-Axis 
    { 
     return [NSNumber numberWithFloat:point.y]; 
    } 
    } else if(self.scatterPlotView2){ 
      NSDictionary *entry = [self.graphData objectAtIndex:index]; 
      CGFloat x = [[entry objectForKey:@"X"] floatValue]; 
      CGFloat z = [[entry objectForKey:@"Y"] floatValue]; 
      CGPoint point1 = CGPointMake(x, z); 


      // FieldEnum determines if we return an X or Y value. 
      if (fieldEnum == CPTScatterPlotFieldX) 
      { 
       return [NSNumber numberWithFloat:point1.x]; 
      } 
      else // Y-Axis 
      { 
       return [NSNumber numberWithFloat:point1.y]; 
      } 


    } 
} 

return [NSNumber numberWithFloat:0]; 
} 

上記のようにxaxisプロット範囲を設定すると、最終的に凝縮グラフが表示されます。プロットの範囲をフロートとして取っているからですか?

答えて

2

これは有効なプロット範囲です。それ以上の情報なしで意図された範囲を表すかどうかは分かりません。

追加されたコードについてのコメント:あなたはデータソースで多くの不必要な作業をしています。データが多い場合は、プロットのパフォーマンスに悪影響を与えます。次のようなものを試してみてください:

NSDictionary *entry = [self.graphData objectAtIndex:index]; 
switch (fieldEnum) { 
case CPTScatterPlotFieldX: 
    return [entry objectForKey:@"X"]; 
    break; 
case CPTScatterPlotFieldY: 
    return [entry objectForKey:@"Y"]; 
    break; 
} 
+0

こんにちは。今すぐコードを更新しました – Siddharthan

+0

正しい 'xRange'を持っているかどうかは、データによって異なります。すべてのx値(少なくとも表示したいもの)が1329375688から1329376188(1329375688 + 500)の間にある場合は、それはあなたが望むものです。 –

+0

はいエリック、X値は24時間まで1秒単位で増加します。 – Siddharthan

関連する問題