2011-07-25 74 views
-1

我是CPBarPlot的新手,完全無法如何將我自己的酒吧添加到條形圖中。我有一個整數我想顯示爲酒吧,但無濟於事。我已經嘗試了以下內容。一些PLZ幫助... plzzzzz。不會在CPBarPlot中顯示酒吧

- (void)constructBarChart 
{ 
    // Create barChart from theme 
    barChart = [[CPXYGraph alloc] initWithFrame:CGRectZero]; 
    CPTheme *theme = [CPTheme themeNamed:kCPDarkGradientTheme]; 
    [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 
CPXYPlotSpace *plotSpace = (CPXYPlotSpace *)barChart.defaultPlotSpace; 
plotSpace.yRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(0.0f) length:CPDecimalFromFloat(300.0f)]; 
plotSpace.xRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(0.0f) length:CPDecimalFromFloat(16.0f)]; 

CPXYAxisSet *axisSet = (CPXYAxisSet *)barChart.axisSet; 
CPXYAxis *x = axisSet.xAxis; 
x.axisLineStyle = nil; 
x.majorTickLineStyle = nil; 
x.minorTickLineStyle = nil; 
x.majorIntervalLength = CPDecimalFromString(@"5"); 
x.orthogonalCoordinateDecimal = CPDecimalFromString(@"0"); 
x.title = @"Age Group"; 
x.titleLocation = CPDecimalFromFloat(7.5f); 
x.titleOffset = 55.0f; 

// Define some custom labels for the data elements 
x.labelRotation = M_PI/4; 
x.labelingPolicy = CPAxisLabelingPolicyNone; 
NSArray *customTickLocations = [NSArray arrayWithObjects:[NSDecimalNumber numberWithInt:1], [NSDecimalNumber numberWithInt:5], [NSDecimalNumber numberWithInt:10], [NSDecimalNumber numberWithInt:15], nil]; 
NSArray *xAxisLabels = [NSArray arrayWithObjects:@"< 40", @"40 - 50", @"50-60", @"> 60", @"Label E", nil]; 
NSUInteger labelLocation = 0; 
NSMutableArray *customLabels = [NSMutableArray arrayWithCapacity:[xAxisLabels count]]; 
for (NSNumber *tickLocation in customTickLocations) { 
    CPAxisLabel *newLabel = [[CPAxisLabel 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]; 

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

CPXYAxis *y = axisSet.yAxis; 
y.axisLineStyle = nil; 
y.majorTickLineStyle = nil; 
y.minorTickLineStyle = nil; 
y.majorIntervalLength = CPDecimalFromString(@"50"); 
y.orthogonalCoordinateDecimal = CPDecimalFromString(@"0"); 
y.title = @"Number of Individuals"; 
y.titleOffset = 45.0f; 
y.titleLocation = CPDecimalFromFloat(150.0f); 


// First bar plot 
CPBarPlot *barPlot = [CPBarPlot tubularBarPlotWithColor:[CPColor darkGrayColor] horizontalBars:NO]; 
//barPlot = [CPBarPlot tubularBarPlotWithColor:[CPColor blueColor] horizontalBars:NO]; 
//barPlot.dataSource = self; 
barPlot.baseValue = CPDecimalFromString(@"0"); 
barPlot.barOffset = CPDecimalFromFloat(0.25f); 
barPlot.barCornerRadius = 2.0f; 
barPlot.identifier = @"Bar Plot 2"; 
barPlot.delegate = self; 
[barChart addPlot:barPlot toPlotSpace:plotSpace]; 
} 

'

-(NSNumber *)numberForPlot:(CPPlot *)plot field:(NSUInteger)fieldEnum recordIndex: (NSUInteger)index 
{ 
NSDecimalNumber *num = nil; 
if ([plot isKindOfClass:[CPPieChart class]]) { 
    if (index >= [self.dataForChart count]) return nil; 

    if (fieldEnum == CPPieChartFieldSliceWidth) { 
     num = [self.dataForChart objectAtIndex:index]; 
    } 
    else { 
     num = (NSDecimalNumber *)[NSDecimalNumber numberWithUnsignedInteger:index]; 
    } 
} 
else if([plot isKindOfClass:[CPBarPlot class]]) { 
    switch (fieldEnum) { 
     case CPBarPlotFieldBarLocation: 
      //num = [NSNumber numberWithUnsignedInteger:index]; 
      num = (NSNumber *)[NSNumber numberWithUnsignedInteger:[[_barChartData objectAtIndex:index] unsignedIntegerValue]]; 
      break; 
    } 
} 

return num; 
} 

回答

3

您需要設置的情節數據源:

barPlot.dataSource = self; 

變化-numberForPlot:field:recordIndex:的條形圖部分:

switch (fieldEnum) { 
    case CPTBarPlotFieldBarLocation: 
     num = [NSNumber numberWithUnsignedInteger:index]; 
     break; 
    case CPTBarPlotFieldBarTip: 
     num = [_barChartData objectAtIndex:index]; 
     break; 
} 

switch語句中的常量取決於您正在使用的Core Plot版本。我使用了最新的字段常量。早期版本使用前綴「CP」而不是「CPT」。非常舊的版本使用CPBarPlotFieldBarLength而不是CPTBarPlotFieldBarTip