2011-07-21 145 views
0
- (void)constructBarChart 
{ 
    // Create barChart from theme 
    barChart = [[CPTXYGraph alloc] initWithFrame:CGRectZero]; 
    CPTTheme *theme = [CPTTheme themeNamed:kCPTDarkGradientTheme]; 
    [barChart applyTheme:theme]; 
    barChartView.hostedGraph = barChart; 
    barChart.plotAreaFrame.masksToBorder = NO; 

    barChart.paddingLeft = 70.0; 
    barChart.paddingTop = 20.0; 
    barChart.paddingRight = 20.0; 
    barChart.paddingBottom = 80.0; 

    // Add plot space for horizontal bar charts 
    CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)barChart.defaultPlotSpace; 
    plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0.0f) length:CPTDecimalFromFloat(300.0f)]; 


    plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0.0f) length:CPTDecimalFromFloat(5.0f)]; 

    CPTXYAxisSet *axisSet = (CPTXYAxisSet *)barChart.axisSet; 
    CPTXYAxis *x = axisSet.xAxis; 
    x.axisLineStyle = nil; 
    x.majorTickLineStyle = nil; 
    x.minorTickLineStyle = nil; 
    x.majorIntervalLength = CPTDecimalFromString(@"5"); 
    x.orthogonalCoordinateDecimal = CPTDecimalFromString(@"0"); 
    x.title = @"X Axis"; 
    x.titleLocation = CPTDecimalFromFloat(7.5f); 
    x.titleOffset = 55.0f; 

    // Define some custom labels for the data elements 
    x.labelRotation = M_PI/4; 
    x.labelingPolicy = CPTAxisLabelingPolicyNone; 
    //NSArray *customTickLocations = [NSArray arrayWithObjects:[NSDecimalNumber numberWithInt:1], [NSDecimalNumber numberWithInt:5], [NSDecimalNumber numberWithInt:10], [NSDecimalNumber numberWithInt:15], nil]; 

    NSArray *customTickLocations = [NSArray arrayWithObjects:[NSDecimalNumber numberWithInt:1], [NSDecimalNumber numberWithInt:2],[NSDecimalNumber numberWithInt:3],[NSDecimalNumber numberWithInt:4],[NSDecimalNumber numberWithInt:5],nil]; 

    NSArray *xAxisLabels = [NSArray arrayWithObjects:@"Label A", @"Label B", @"Label C", @"Label D", @"Label E", nil]; 

    barCharData = [[NSMutableArray alloc]initWithObjects:[NSDecimalNumber numberWithInt:30], [NSDecimalNumber numberWithInt:30],[NSDecimalNumber numberWithInt:40],[NSDecimalNumber numberWithInt:50],[NSDecimalNumber numberWithInt:100],nil]; 


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

    x.axisLabels = [NSSet setWithArray:customLabels]; 

    CPTXYAxis *y = axisSet.yAxis; 
    y.axisLineStyle = nil; 
    y.majorTickLineStyle = nil; 
    y.minorTickLineStyle = nil; 
    y.majorIntervalLength = CPTDecimalFromString(@"50"); 
    y.orthogonalCoordinateDecimal = CPTDecimalFromString(@"0"); 
    y.title = @"Y Axis"; 
    y.titleOffset = 45.0f; 
    y.titleLocation = CPTDecimalFromFloat(150.0f); 

    /* 
    // First bar plot 
    CPTBarPlot *barPlot = [CPTBarPlot tubularBarPlotWithColor:[CPTColor darkGrayColor] horizontalBars:NO]; 

    barPlot.baseValue = CPTDecimalFromString(@"0"); 
    barPlot.dataSource = self; 
    barPlot.barOffset = CPTDecimalFromFloat(-0.25f); 
    barPlot.identifier = @"Bar Plot 1"; 
    [barChart addPlot:barPlot toPlotSpace:plotSpace]; 
    */ 

    // Second bar plot 
    CPTBarPlot *barPlot = [CPTBarPlot tubularBarPlotWithColor:[CPTColor blueColor] horizontalBars:NO]; 
    barPlot.dataSource = self; 
    barPlot.baseValue = CPTDecimalFromString(@"0"); 
    barPlot.barOffset = CPTDecimalFromFloat(0.25f); 
    barPlot.barCornerRadius = 2.0f; 
    barPlot.identifier = @"Bar Plot 2"; 
    barPlot.delegate = self; 
    [barChart addPlot:barPlot toPlotSpace:plotSpace]; 
} 

    -(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index 
    { 
     NSDecimalNumber *num = nil; 

      printf("\n ====================index =====%d",index); 
      if(fieldEnum == CPTBarPlotFieldBarLocation) 
      { 
       num = [barCharData objectAtIndex:index]; 
      } 
      else 
      { 
       num = [barCharData objectAtIndex:index]; 
      } 
      NSLog(@"\n ====================num =====%@",num); 

     } 


     return num; 
    } 

我無法在條形圖中顯示條形圖。我走出把這樣無法在條形圖中顯示條形圖嗎?

====================index =====0 
2011-07-21 12:51:00.692 CPTTestApp-iPad[1004:207] 
    ====================num =====30 

    ====================index =====1 
2011-07-21 12:51:00.693 CPTTestApp-iPad[1004:207] 
    ====================num =====30 

    ====================index =====2 
2011-07-21 12:51:00.694 CPTTestApp-iPad[1004:207] 
    ====================num =====40 

    ====================index =====3 
2011-07-21 12:51:00.695 CPTTestApp-iPad[1004:207] 
    ====================num =====50 

    ====================index =====4 
2011-07-21 12:51:00.696 CPTTestApp-iPad[1004:207] 
    ====================num =====100 

    ====================index =====0 
2011-07-21 12:51:00.697 CPTTestApp-iPad[1004:207] 
    ====================num =====30 

    ====================index =====1 
2011-07-21 12:51:00.698 CPTTestApp-iPad[1004:207] 
    ====================num =====30 

    ====================index =====2 
2011-07-21 12:51:00.699 CPTTestApp-iPad[1004:207] 
    ====================num =====40 

    ====================index =====3 
2011-07-21 12:51:00.699 CPTTestApp-iPad[1004:207] 
    ====================num =====50 

    ====================index =====4 
2011-07-21 12:51:00.700 CPTTestApp-iPad[1004:207] 
    ====================num =====100 

回答

2

numberForPlot:field:recordIndex方法控制檯,在域是CPTBarPlotFieldBarLocation你應該簡單地返回index而不是[barCharData objectAtIndex:index]

+0

謝謝,我會檢查它 –

+0

那個委託方法也讓我困惑!你回答救了我,把我的頭髮拉出來。 – ethyreal