2017-08-20 2 views
0

mes étiquettes de graduation de l'axe x semblent disparaître d'elles-mêmes. Parfois, ils montrent bien d'autres fois ils sont partis de la vue. Je suppose qu'il a quelque chose à faire pour ma mise à l'échelle des données, mais j'ai essayé beaucoup de choses et je peux le faire réparer. mon code suit (je l'ai copié à peu près directement à partir de l'un des exemples). Mes valeurs sont toutes positives. S'il vous plaît laissez-moi savoir si vous avez des suggestions. Merci.Perdre les titres de l'axe des x sur le coreplot

-(void)configureHostFour { 
    self.hostView = [(CPTGraphHostingView *) [CPTGraphHostingView alloc] initWithFrame:self.view.bounds]; 
    self.hostView.allowPinchScaling = YES; 
    [self.myViewFour addSubview:self.hostView]; 
    CPTGraphHostingView *BarGraphView = [[CPTGraphHostingView alloc] init]; 
    self.hostView.frame = CGRectMake(self.myViewFour.bounds.origin.x, self.myViewFour.bounds.origin.y, self.myViewFour.bounds.size.width, self.myViewFour.bounds.size.height); 
    [self.hostView addSubview:BarGraphView]; 
} 

-(void)configureGraphFour { 
    // 1 - Create the graph 
    CPTGraph *graph = [[CPTXYGraph alloc] initWithFrame:self.hostView.bounds]; 
    //  [graph applyTheme:[CPTTheme themeNamed:kCPTSlateTheme]]; 
    [graph applyTheme:[CPTTheme themeNamed:kCPTPlainWhiteTheme]]; 

    self.hostView.hostedGraph = graph; 
    // 2 - Set graph title 
    NSString *title = @"Heart Rate"; 
    graph.title = title; 
    // 3 - Create and set text style 
    CPTMutableTextStyle *titleStyle = [CPTMutableTextStyle textStyle]; 
    titleStyle.color = [CPTColor blackColor]; 
    titleStyle.fontName = @"Helvetica-Bold"; 
    titleStyle.fontSize = 12.0f; 
    graph.titleTextStyle = titleStyle; 
    graph.titlePlotAreaFrameAnchor = CPTRectAnchorTop; 
    graph.titleDisplacement = CGPointMake(0.0f, 17.0f); 
    // 4 - Set padding for plot area 
    [graph.plotAreaFrame setPaddingLeft:1.0f]; 
    [graph.plotAreaFrame setPaddingBottom:1.0f]; 
    // 5 - Enable user interactions for plot space 
    CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) graph.defaultPlotSpace; 
    plotSpace.allowsUserInteraction = YES; 
} 

-(void)configurePlotsFour { 
    // 1 - Get graph and plot space 
    CPTGraph *graph = self.hostView.hostedGraph; 
    CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) graph.defaultPlotSpace; 

    // 2 - Create the plots 
    CPTScatterPlot *hrPlot = [[CPTScatterPlot alloc] init]; 
    hrPlot.dataSource = self; 
    hrPlot.identifier = hrSCORE; 
    CPTColor *hrColor = [CPTColor blueColor]; 
    [graph addPlot:hrPlot toPlotSpace:plotSpace]; 

    CPTScatterPlot *avghrPlot = [[CPTScatterPlot alloc] init]; 
    avghrPlot.dataSource = self; 
    avghrPlot.identifier = hrSCOREAVG; 
    CPTColor *avghrColor = [CPTColor redColor]; 
    [graph addPlot:avghrPlot toPlotSpace:plotSpace]; 


    // 3 - Set up plot space 
    [plotSpace scaleToFitPlots:[NSArray arrayWithObjects:hrPlot, avghrPlot, nil]]; 
    CPTMutablePlotRange *xRange = [plotSpace.xRange mutableCopy]; 
    [xRange expandRangeByFactor:CPTDecimalFromCGFloat(1.1f)]; 
    plotSpace.xRange = xRange; 
    CPTMutablePlotRange *yRange = [plotSpace.yRange mutableCopy]; 
    [yRange expandRangeByFactor:CPTDecimalFromCGFloat(1.2f)]; 
    plotSpace.yRange = yRange; 

    // 4 - Create styles and symbols 
    CPTMutableLineStyle *hrLineStyle = [hrPlot.dataLineStyle mutableCopy]; 
    hrLineStyle.lineWidth = 2.0; 
    hrLineStyle.lineColor = hrColor; 
    hrPlot.dataLineStyle = hrLineStyle; 
    CPTMutableLineStyle *hrSymbolLineStyle = [CPTMutableLineStyle lineStyle]; 
    hrSymbolLineStyle.lineColor = hrColor; 

    CPTMutableLineStyle *avghrLineStyle = [hrPlot.dataLineStyle mutableCopy]; 
    avghrLineStyle.lineWidth = 2.0; 
    avghrLineStyle.lineColor = avghrColor; 
    avghrPlot.dataLineStyle = avghrLineStyle; 
    CPTMutableLineStyle *avghrSymbolLineStyle = [CPTMutableLineStyle lineStyle]; 
    avghrSymbolLineStyle.lineColor = avghrColor; 

} 

-(void)configureAxesFour{ 
    // 1 - Create styles 
    CPTMutableTextStyle *axisTitleStyle = [CPTMutableTextStyle textStyle]; 
    axisTitleStyle.color = [CPTColor blackColor]; 
    axisTitleStyle.fontName = @"Helvetica-Bold"; 
    axisTitleStyle.fontSize = 10.0f; 
    CPTMutableLineStyle *axisLineStyle = [CPTMutableLineStyle lineStyle]; 
    axisLineStyle.lineWidth = .01f; 
    axisLineStyle.lineColor = [CPTColor blackColor]; 

    CPTMutableTextStyle *axisTextStyle = [[CPTMutableTextStyle alloc] init]; 
    axisTextStyle.color = [CPTColor blackColor]; 
    axisTextStyle.fontName = @"Helvetica-Bold"; 
    axisTextStyle.fontSize = 9.0f; 
    CPTMutableLineStyle *tickLineStyle = [CPTMutableLineStyle lineStyle]; 
    tickLineStyle.lineColor = [CPTColor blackColor]; 
    tickLineStyle.lineWidth = 1.0f; 
    CPTMutableLineStyle *gridLineStyle = [CPTMutableLineStyle lineStyle]; 
    tickLineStyle.lineColor = [CPTColor blackColor]; 
    tickLineStyle.lineWidth = 1.0f; 
    // 2 - Get axis set 
    CPTXYAxisSet *axisSet = (CPTXYAxisSet *) self.hostView.hostedGraph.axisSet; 
    // 3 - Configure x-axis 
    CPTAxis *x = axisSet.xAxis; 
    x.title = @"Day of Month"; 
    x.titleTextStyle = axisTitleStyle; 
    x.titleOffset = 20.0f; 
    x.axisLineStyle = axisLineStyle; 
    x.labelingPolicy = CPTAxisLabelingPolicyNone; 
    x.labelTextStyle = axisTextStyle; 
    x.majorTickLineStyle = axisLineStyle; 
    x.majorTickLength = 4.0f; 
    x.tickDirection = CPTSignNegative; 

    CGFloat dateCount = [self.dateArray count]; 
    NSMutableSet *xLabels = [NSMutableSet setWithCapacity:dateCount]; 
    NSMutableSet *xLocations = [NSMutableSet setWithCapacity:dateCount]; 
    NSInteger i = 0; 
    for (NSString *date in self.dateArray) { 
     CPTAxisLabel *label = [[CPTAxisLabel alloc] initWithText:date textStyle:x.labelTextStyle]; 
     CGFloat location = i++; 
     label.tickLocation = CPTDecimalFromCGFloat(location); 
     label.offset = x.majorTickLength; 
     if (label) { 
      [xLabels addObject:label]; 
      [xLocations addObject:[NSNumber numberWithFloat:location]]; 
     } 
    } 
    x.axisLabels = xLabels; 
    x.majorTickLocations = xLocations; 

    // 4 - Configure y-axis 
    CPTAxis *y = axisSet.yAxis; 
    y.title = @""; 
    y.titleTextStyle = axisTitleStyle; 
    y.titleOffset = -40.0f; 
    y.axisLineStyle = axisLineStyle; 
    y.majorGridLineStyle = gridLineStyle; 
    y.labelingPolicy = CPTAxisLabelingPolicyNone; 
    y.labelTextStyle = axisTextStyle; 
    y.labelOffset = 16.0f; 
    y.majorTickLineStyle = axisLineStyle; 
    y.majorTickLength = 4.0f; 
    y.minorTickLength = 2.0f; 
    y.tickDirection = CPTSignPositive; 
    NSInteger majorIncrement = self.hrTick; 
    NSInteger minorIncrement = self.hrHalfTick; 
    CGFloat yMax = 700.0f; // should determine dynamically based on max price 
    NSMutableSet *yLabels = [NSMutableSet set]; 
    NSMutableSet *yMajorLocations = [NSMutableSet set]; 
    NSMutableSet *yMinorLocations = [NSMutableSet set]; 
    for (NSInteger j = minorIncrement; j <= yMax; j += minorIncrement) { 
     NSUInteger mod = j % majorIncrement; 
     if (mod == 0) { 
      CPTAxisLabel *label = [[CPTAxisLabel alloc] initWithText:[NSString stringWithFormat:@"%li", (long)j] textStyle:y.labelTextStyle]; 
      NSDecimal location = CPTDecimalFromInteger(j); 
      label.tickLocation = location; 
      label.offset = -y.majorTickLength - y.labelOffset; 
      if (label) { 
       [yLabels addObject:label]; 
      } 
      [yMajorLocations addObject:[NSDecimalNumber decimalNumberWithDecimal:location]]; 
     } else { 
      [yMinorLocations addObject:[NSDecimalNumber decimalNumberWithDecimal:CPTDecimalFromInteger(j)]]; 
     } 
    } 
    y.axisLabels = yLabels; 
    y.majorTickLocations = yMajorLocations; 
    y.minorTickLocations = yMinorLocations; 
} 

#pragma mark - CPTPlotDataSource methods 
-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot { 
    return [self.dateArray count]; 
} 

-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index { 
    NSInteger valueCount = [self.dateArray count]; 
    switch (fieldEnum) { 
     case CPTScatterPlotFieldX: 
      if (index < valueCount) { 
       return [NSNumber numberWithUnsignedInteger:index]; 
      } 
      break; 

     case CPTScatterPlotFieldY: 

      if ([plot.identifier isEqual:hrSCORE] == YES) { 
       NSLog(@"hrscore"); 
       return [self.hrArray objectAtIndex:index]; 
      } else if ([plot.identifier isEqual:hrSCOREAVG] == YES) { 
       NSLog(@"hravg"); 
       return [self.avgHrArray objectAtIndex:index]; 
      } else if ([plot.identifier isEqual:fgSCORE] == YES) { 
       NSLog(@"gfscore"); 

       return [self.fgArray objectAtIndex:index]; 
      } else if ([plot.identifier isEqual:fgSCOREAVG] == YES) { 
       NSLog(@"fgavg"); 

       return [self.avgFgArray objectAtIndex:index]; 
      } else if ([plot.identifier isEqual:weightSCORE] == YES) { 
       NSLog(@"weight"); 

       return [self.weightArray objectAtIndex:index]; 
      } else if ([plot.identifier isEqual:weightSCOREAVG] == YES) { 
       NSLog(@"weight av"); 

       return [self.avgWeightArray objectAtIndex:index]; 
      } else if ([plot.identifier isEqual:mapSCORE] == YES) { 
       NSLog(@"map"); 

       return [self.mapArray objectAtIndex:index]; 
      } else if ([plot.identifier isEqual:mapSCOREAVG] == YES) { 
       NSLog(@"map avg"); 

       return [self.avgMapArray objectAtIndex:index]; 
      } 

      break; 
    } 
    return [NSDecimalNumber zero]; 
} 

Répondre

0

Les emplacements des ticks et les étiquettes sont placés sur des valeurs entières commençant à zéro (0). Vous ne dites pas ce que le xRange est, mais si son length est inférieur à un (1) et ne couvre pas l'un des emplacements de tiques, vous ne verrez pas de tiques ou d'étiquettes.

+0

Merci. Les étiquettes x tick montrent bien, mais ils sont juste hors du cadre. Ils montrent juste en dessous du Y zéro et je peux faire défiler vers eux. Est-il possible de compresser l'axe Y. Par exemple, si mes valeurs y sont comprises entre 50 et 100, l'axe des ordonnées (graphe entier) ne montre que 50 à 100. Cela résoudrait l'absence de l'axe x, je pense. Merci pour ton aide. – SlimPickens

+0

Vous pouvez utiliser les contraintes d'axe pour verrouiller l'axe des x en position. –

+0

pourriez-vous s'il vous plaît inclure un extrait de code pour cela. Je n'arrive pas à comprendre comment faire ça. Merci beaucoup! – SlimPickens