条形仅出现在第一个索引处

时间:2012-12-04 13:46:20

标签: ios indexing core-plot cptbarplot

我的条形图上的条形图并没有分布在整个图形中,而是局限于第一个索引! enter image description here

- (UIView*)pagingScrollView:(BAGPagingScrollView*)pagingScrollView
       viewForPageIndex:(int)index;

{
NSLog(@"THE INDEX COMING THROUGH INTO THE PAGING SCROLL VIEW = %i",index);
      _index = index;

_graphBase = [[CPTGraphHostingView alloc]initWithFrame:_pagingView.frame];
[self updateGraph:_graphBase forIndex:_index];

}

-(void) updateGraph:(CPTGraphHostingView*)graph forIndex:(int) index
{
....
else if (index == 5){

    graph.allowPinchScaling = NO;
    _averageOfPar = [[NSArray alloc]initWithArray:[self getParForPlayerName]];
    _averageDataValuesMultiple = [[NSArray alloc]initWithArray:[self arrayOfAverageDataValuesFromTheUserMultiple]];
    NSLog(@"average data values %@", _averageDataValuesMultiple);
    NSLog(@"average of par = %@",_averageOfPar);
    [self barChartconfigureGraph:graph];
    [self barChartconfigurePlots:graph];
    [self barChartconfigureAxes:graph]; 

}

.... }

 -(void)barChartconfigureGraph:(CPTGraphHostingView*)hostView {

CPTGraph *graph = [[CPTXYGraph alloc] initWithFrame:hostView.bounds];
graph.plotAreaFrame.masksToBorder = NO;
hostView.hostedGraph = graph;

// 2 - Configure the graph

[graph applyTheme:[CPTTheme themeNamed:kCPTDarkGradientTheme]];
graph.plotAreaFrame.fill = [CPTFill fillWithColor:[CPTColor clearColor]];
graph.paddingBottom = 30.0f;
graph.paddingLeft  = 30.0f;
graph.paddingTop    = 0.0f;
graph.paddingRight  = 0.0f;

// 3 - Set up styles

CPTMutableTextStyle *titleStyle = [CPTMutableTextStyle textStyle];
titleStyle.color = [CPTColor whiteColor];
titleStyle.fontName = @"Helvetica-Bold";
titleStyle.fontSize = 16.0f;

// 4 - Set up title

NSString *title = @"Average Shot Compared To Par";
graph.title = title;
graph.titleTextStyle = titleStyle;
graph.titlePlotAreaFrameAnchor = CPTRectAnchorTop;
graph.titleDisplacement = CGPointMake(0.0f, -16.0f);
// 5 - Set up plot space
CGFloat xMin = 0.0f;
CGFloat xMax = (([_averageOfPar count])+0.2);
CGFloat yMin = 0.0f;
CGFloat yMax = ([self largestShotMade]);

CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) graph.defaultPlotSpace;
plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(xMin) length:CPTDecimalFromFloat(xMax)];
plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(yMin) length:CPTDecimalFromFloat(yMax)];


  }

- (无效)barChartconfigurePlots:(CPTGraphHostingView *)hostView {

// 1 - Set up the three plots

_personsShotPlot = [CPTBarPlot tubularBarPlotWithColor:[CPTColor blueColor] horizontalBars:NO];
_personsShotPlot.identifier = _nameComingThrough;
_parPlot = [CPTBarPlot tubularBarPlotWithColor:[CPTColor whiteColor] horizontalBars:NO];
_parPlot.identifier = PAR;

// 2 - Set up line style

CPTMutableLineStyle *barLineStyle = [[CPTMutableLineStyle alloc] init];
barLineStyle.lineColor = [CPTColor lightGrayColor];
barLineStyle.lineWidth = 0.5;

// 3 - Add plots to graph

CPTGraph *graph = hostView.hostedGraph;
CGFloat barX = CPDBarInitialXSecondForSplotMultiple;
NSArray *plots = [NSArray arrayWithObjects: self.parPlot,self.personsShotPlot, nil];

//NSLog(@"about to enter the plot for loop");

for (CPTBarPlot *plot in plots) {
    plot.dataSource = self;
   plot.delegate = self;
    plot.barWidth = CPTDecimalFromDouble(CPDBarInitialXSecondForSplotMultiple/* + [self widthNumToAdd]*/);
    plot.barOffset = CPTDecimalFromDouble(barX);
    plot.lineStyle = barLineStyle;
    [graph addPlot:plot toPlotSpace:graph.defaultPlotSpace];
    barX += CPDBarInitialXSecondForSplotMultiple/*+ [self widthNumToAdd]*/;
}
//[graph reloadDataIfNeeded];

}        - (无效)barChartconfigurePlots:(CPTGraphHostingView *)hostView {

// 1 - Set up the three plots

_personsShotPlot = [CPTBarPlot tubularBarPlotWithColor:[CPTColor blueColor] horizontalBars:NO];
_personsShotPlot.identifier = _nameComingThrough;
_parPlot = [CPTBarPlot tubularBarPlotWithColor:[CPTColor whiteColor] horizontalBars:NO];
_parPlot.identifier = PAR;

// 2 - Set up line style

CPTMutableLineStyle *barLineStyle = [[CPTMutableLineStyle alloc] init];
barLineStyle.lineColor = [CPTColor lightGrayColor];
barLineStyle.lineWidth = 0.5;

// 3 - Add plots to graph

CPTGraph *graph = hostView.hostedGraph;
CGFloat barX = CPDBarInitialXSecondForSplotMultiple;
NSArray *plots = [NSArray arrayWithObjects: self.parPlot,self.personsShotPlot, nil];

//NSLog(@"about to enter the plot for loop");

for (CPTBarPlot *plot in plots) {
    plot.dataSource = self;
   plot.delegate = self;
    plot.barWidth = CPTDecimalFromDouble(CPDBarInitialXSecondForSplotMultiple/* + [self widthNumToAdd]*/);
    plot.barOffset = CPTDecimalFromDouble(barX);
    plot.lineStyle = barLineStyle;
    [graph addPlot:plot toPlotSpace:graph.defaultPlotSpace];
    barX += CPDBarInitialXSecondForSplotMultiple/*+ [self widthNumToAdd]*/;
}
//[graph reloadDataIfNeeded];

}

- (void)barChartconfigureAxes:(CPTGraphHostingView *)hostView {

// 1 - Configure styles

CPTMutableTextStyle *axisTitleStyle = [CPTMutableTextStyle textStyle];
axisTitleStyle.color = [CPTColor whiteColor];
axisTitleStyle.fontName = @"Helvetica-Bold";
axisTitleStyle.fontSize = 12.0f;
CPTMutableLineStyle *axisLineStyle = [CPTMutableLineStyle lineStyle];
axisLineStyle.lineWidth = 2.0f;
axisLineStyle.lineColor = [[CPTColor whiteColor] colorWithAlphaComponent:1];

// 2 - Get the graph's axis set

CPTXYAxisSet *axisSet = (CPTXYAxisSet *) hostView.hostedGraph.axisSet;

// 3 - Configure the x-axis

axisSet.xAxis.labelingPolicy = CPTAxisLabelingPolicyNone;
axisSet.xAxis.title = @"Hole Number";
axisSet.xAxis.titleTextStyle = axisTitleStyle;
axisSet.xAxis.titleOffset = 15.0f;
axisSet.xAxis.axisLineStyle = axisLineStyle;

CPTAxis *x = axisSet.xAxis;

NSMutableSet *xLabels = [NSMutableSet setWithCapacity:[_averageDataValues count]];
NSMutableSet *xLocations = [NSMutableSet setWithCapacity:[_averageDataValues count]];
NSInteger i = 0;

for (NSString *holeName in [self holeNames]) {


    CPTAxisLabel *label = [[CPTAxisLabel alloc] initWithText:holeName  textStyle:x.labelTextStyle];
    CGFloat location = i++;
    label.tickLocation = CPTDecimalFromCGFloat(location + .4);
    label.offset =-1;
    if (label) {
        [xLabels addObject:label];

        [xLocations addObject:[NSNumber numberWithFloat:location + .4]];
    }
}

x.axisLabels = xLabels;
x.majorTickLocations = xLocations;



// 4 - Configure the y-axis
axisSet.yAxis.labelingPolicy = CPTAxisLabelingPolicyNone;
axisSet.yAxis.title = @"Number Of Shots";
axisSet.yAxis.titleTextStyle = axisTitleStyle;
axisSet.yAxis.titleOffset = 5.0f;
axisSet.yAxis.axisLineStyle = axisLineStyle;

[hostView.hostedGraph reloadDataIfNeeded];

}

 -(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot {
  else if (_index == 5) return 18;//[_averageDataValuesMultiple count];

}



  -(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index {

else if (_index == 5) {

    if (fieldEnum == CPTBarPlotFieldBarTip) {
    if ([plot.identifier isEqual:_nameComingThrough]) {

    return [_averageDataValuesMultiple objectAtIndex:index];
        //return [NSNumber numberWithInt:5];

    } else if ([plot.identifier isEqual:PAR]) {

        return [_averageOfPar objectAtIndex:index];
        //return [NSNumber numberWithInt:2];

    }
}
}

我最初不想发布代码,因为它有点复杂,我希望它是以前见过的错误!

1 个答案:

答案 0 :(得分:1)

CPTBarPlotFieldBarLocation外,请确保您的数据源为CPTBarPlotFieldBarTip字段提供值。您似乎为每个条形索引返回相同的位置值,这使得条形图彼此重叠。