2010-06-17 68 views
0

我几乎完成了我一直在研究几天的核心图。 有些东西我仍然无法做到(我找不到这方面的文档),是将x轴标签更改为我需要的东西。 今天,我有一个整数标签beeing每5个值显示一个x轴:“5 10 15 ...”,我需要标签回应到最后24小时。例如,如果是15:00,我需要这样的标签:“15 16 17 ... 23 0 1 2 .. 15”我正在考虑使用NSArray并将它传递给plotSpace.xRange,但我没有知道这是否是最好的方法。 这里是我的代码:iphone,使用数组来定义核心绘图范围

  CPXYPlotSpace *plotSpace = (CPXYPlotSpace *)graph.defaultPlotSpace; 
      plotSpace.xRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(-15) 
                  length:CPDecimalFromFloat(xmax + 15)]; 
      plotSpace.yRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(-1000) 
                  length:CPDecimalFromFloat(4300)]; 


      // Setup axis 
      CPXYAxisSet *axisSet = (CPXYAxisSet *)graph.axisSet; 
      CPLineStyle *lineStyle = [CPLineStyle lineStyle]; 
      lineStyle.lineColor = [CPColor whiteColor]; 
      lineStyle.lineWidth = 1.0f; 
      CPTextStyle *cyanStyle = [CPTextStyle textStyle]; 
      cyanStyle.color = [CPColor cyanColor]; 
      NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
      [formatter setMaximumFractionDigits:0]; 

      axisSet.xAxis.majorIntervalLength = [[NSDecimalNumber decimalNumberWithString:@"5"] decimalValue]; 
      axisSet.xAxis.minorTicksPerInterval = 0; 
      axisSet.xAxis.majorTickLineStyle = lineStyle; 
      axisSet.xAxis.minorTickLineStyle = lineStyle; 
      axisSet.xAxis.axisLineStyle = lineStyle; 
      axisSet.xAxis.majorTickLength = 5.0f; 
      axisSet.xAxis.labelOffset = 3.0f; 
      axisSet.xAxis.labelExclusionRanges = [NSArray arrayWithObjects: 
             [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(-15) 
                    length:CPDecimalFromFloat(15)], 
             nil]; 
      axisSet.xAxis.visibleRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromInteger(0) length:CPDecimalFromInteger(xmax)]; 
      axisSet.xAxis.labelFormatter = formatter; 
      axisSet.xAxis.title = @"Hour"; 
      axisSet.xAxis.titleOffset = 25.0f; 
      axisSet.xAxis.titleLocation = CPDecimalFromFloat(25.0f); 
      axisSet.xAxis.titleTextStyle = cyanStyle; 

任何帮助将是非常欢迎的。 非常感谢, 吕克

回答

0

我终于找到了解决办法使用自定义标签:

  NSArray *customTickLocations = [NSArray arrayWithObjects:[NSDecimalNumber numberWithInt:0], 
                    [NSDecimalNumber numberWithInt:5], 
                    [NSDecimalNumber numberWithInt:10], 
                    [NSDecimalNumber numberWithInt:15], 
                    [NSDecimalNumber numberWithInt:20], 
                    [NSDecimalNumber numberWithInt:25], 
                    [NSDecimalNumber numberWithInt:30], 
                    [NSDecimalNumber numberWithInt:35],             
                    [NSDecimalNumber numberWithInt:40],             
                    nil]; 
      NSArray *xAxisLabels = [NSArray arrayWithObjects:@"15",@"18",@"21",@"0",@"3",@"6",@"9",@"12",@"15",nil]; 

      NSUInteger labelLocation = 0; 
      NSMutableArray *customLabels = [NSMutableArray arrayWithCapacity:[xAxisLabels count]]; 
      for (NSNumber *tickLocation in customTickLocations) { 
       CPAxisLabel *newLabel = [[CPAxisLabel alloc] initWithText: [xAxisLabels objectAtIndex:labelLocation++] textStyle:axisSet.xAxis.labelTextStyle]; 
       newLabel.tickLocation = [tickLocation decimalValue]; 
       newLabel.offset = axisSet.xAxis.labelOffset + axisSet.xAxis.majorTickLength; 
       [customLabels addObject:newLabel]; 
       [newLabel release]; 
      } 

      axisSet.xAxis.axisLabels = [NSSet setWithArray:customLabels]; 

还有有些事情要澄清,但这肯定是要走的路:) Luc