2013-06-03 99 views
1

我已經實施了一個核心繪圖條形圖,如下所示,它觸發數據源並採取值。但情節並沒有顯示任何酒吧。有人可以告訴我問題在哪裏。我剛開始使用CorePlot for Graphics。核心繪圖條形圖 - 酒吧不顯示

- (NSMutableArray *)plotDataValues 
{ 
    NSMutableArray *array = [NSMutableArray arrayWithObjects:[NSNumber numberWithDouble:4500123.213],[NSNumber numberWithDouble:12000500.213],[NSNumber numberWithDouble:10800456.213],[NSNumber numberWithDouble:7000500.213],[NSNumber numberWithDouble:5500300.213],[NSNumber numberWithDouble:3800623.213],[NSNumber numberWithDouble:2600345.213],[NSNumber numberWithDouble:1900764.213],[NSNumber numberWithDouble:8600500.213],[NSNumber numberWithDouble:1200376.213], nil]; 

    return array; 
} 



- (void)initTopPropertyPlot 
{ 
    self.topWellsGraphHostingView.allowPinchScaling = NO; 
    [self configurePropertyListGraph]; 
    [self configurePropertyPlot]; 
    [self configurePropertyPlotAxes]; 
} 

- (void)configurePropertyListGraph 
{ 
    //Create the Bar Graph. 
    self.propertyListBarChart = [[CPTXYGraph alloc] initWithFrame:self.topWellsGraphHostingView.bounds]; 
    self.propertyListBarChart.plotAreaFrame.masksToBorder = NO; 
    self.topWellsGraphHostingView.hostedGraph = self.propertyListBarChart; 

    // 2 - Configure the graph 
    //[self.propertyListBarChart applyTheme:[CPTTheme themeNamed:kCPTSlateTheme]]; 
    [self.propertyListBarChart applyTheme:nil]; 
    self.propertyListBarChart.paddingBottom = 30.0f; 
    self.propertyListBarChart.paddingLeft = 50.0f; 
    self.propertyListBarChart.paddingTop = 20.0f; 
    self.propertyListBarChart.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 = @""; 
    self.propertyListBarChart.title = title; 
    self.propertyListBarChart.titleTextStyle = titleStyle; 
    self.propertyListBarChart.titlePlotAreaFrameAnchor = CPTRectAnchorTop; 
    self.propertyListBarChart.titleDisplacement = CGPointMake(0.0f, -16.0f); 

    // 5 - Set up plot space 
    //NSNumber *topValue = (NSNumber *)[[[DataStore sharedStore] valuesForBars] objectAtIndex:0]; 

    //X-Axis will contain Amount and Y-Axis acutally there is nothing to plot. 

    CGFloat xMin = 0.0f; 
    CGFloat xMax = 15000000.0f; 
    CGFloat yMin = 0.0f; 
    CGFloat yMax = 7.0f; // should determine dynamically based on max price 
    CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) self.propertyListBarChart.defaultPlotSpace; 
    plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(xMin) length:CPTDecimalFromDouble(xMax)]; 
    plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(yMin) length:CPTDecimalFromDouble(yMax)]; 
} 

- (void)configurePropertyPlot 
{ 
    // 1 - Set up Bar plot. 
    self.propertyBarPlot = [CPTBarPlot tubularBarPlotWithColor:[CPTColor greenColor] horizontalBars:NO]; 
    self.propertyBarPlot.identifier = kTopWellsBarPlot; 
    [self.propertyBarPlot setBarsAreHorizontal:YES]; 

    // 3 - Add plots to graph 
    CPTGraph *graph = self.propertyListBarChart; 
    self.propertyBarPlot.dataSource = (id)self; 
    self.propertyBarPlot.barWidth = CPTDecimalFromDouble(4.0f); 
    //self.propertyBarPlot.lineStyle = barLineStyle; 
    [self.propertyListBarChart addPlot:self.propertyBarPlot toPlotSpace:graph.defaultPlotSpace]; 
} 

-(void)configurePropertyPlotAxes 
{ 
    // 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 = 3.0f; 
    //axisLineStyle.lineColor = [[CPTColor whiteColor] colorWithAlphaComponent:1]; 
    axisLineStyle.lineColor = [CPTColor blueColor]; 

    // 2 - Get the graph's axis set 
    CPTXYAxisSet *axisSet = (CPTXYAxisSet *) self.topWellsGraphHostingView.hostedGraph.axisSet; 

    // 3 - Configure the x-axis 
    axisSet.xAxis.labelingPolicy = CPTAxisLabelingPolicyEqualDivisions; 
    axisSet.xAxis.title = @"Amount"; 
    axisSet.xAxis.titleTextStyle = axisTitleStyle; 
    axisSet.xAxis.titleOffset = 10.0f; 
    axisSet.xAxis.axisLineStyle = axisLineStyle; 

    // 4 - Configure the y-axis 
    axisSet.yAxis.labelingPolicy = CPTAxisLabelingPolicyEqualDivisions; 
    axisSet.yAxis.title = @"Top 5"; 
    axisSet.yAxis.titleTextStyle = axisTitleStyle; 
    axisSet.yAxis.titleOffset = 5.0f; 
    axisSet.yAxis.axisLineStyle = axisLineStyle; 
} 

#pragma mark - 
#pragma mark - CPTPlotDataSource methods 
- (NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot 
{ 
    NSLog(@"Names Array: %@",[[DataStore sharedStore] namesForBars]); 
    NSLog(@"Values Array: %@",[[DataStore sharedStore] valuesForBars]); 
    NSLog(@"Formatted Values Array: %@",[[DataStore sharedStore] formattedValuesForBars]); 

    //return [[[DataStore sharedStore] namesForBars] count]; 
    return [[self plotDataValues] count]; 
} 

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

    if ((fieldEnum == 1 || fieldEnum == 0 || fieldEnum == 2) && (index < [[[DataStore sharedStore] valuesForBars] count])) 
    { 
     float value = 0.00f; 

     if ([plot isKindOfClass:[CPTBarPlot class]]) 
     { 
      NSString *plotIdentifier = (NSString *)plot.identifier; 

      if ([plotIdentifier isEqualToString:kTopWellsBarPlot]) 
      { 
       value = [[[self plotDataValues] objectAtIndex:index] doubleValue]; 
      } 
     } 

     num = [NSNumber numberWithFloat:value]; 
    } 
    return num; 
} 

有人可以告訴我在執行過程中是否存在問題。託管視圖被添加到Xib。

回答

3
  1. 數據源應檢查使用預定義的常量(CPTBarPlotFieldBarLocationCPTBarPlotFieldBarTipCPTBarPlotFieldBarBase)積場,而不是使用「魔術」號。

  2. 大多數酒吧情節至少需要每個酒吧的位置和小費值。確保數據源爲每個字段返回正確的值。

  3. 地塊範圍內的length應該是max - min而不是max。在這種情況下,由於min的值爲零,所以沒有關係,但在其他情況下它會起作用。

Core Plot示例應用程序中有許多棒圖的例子。 Plot Gallery應用程序是一個很好的開始。

+0

謝謝你的回答。其實我最初嘗試fieldEnum常量,它不工作,這就是爲什麼我切換到手動編號。我將檢查示例應用程序。 –