簡體   English   中英

Core Plot條形圖 - Bar未顯示

[英]Core Plot bar graph - Bar does not show up

我已經實現了核心繪圖條形圖,如下所示,它會觸發數據源並獲取值。 但情節沒有出現任何障礙。 有人能告訴我問題在哪里。 我剛開始使用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中。

  1. 數據源應使用預定義常量( CPTBarPlotFieldBarLocationCPTBarPlotFieldBarTipCPTBarPlotFieldBarBase )檢查繪圖字段,而不是使用“魔術”數字。

  2. 大多數條形圖至少需要每個條形圖的位置和尖端值。 確保數據源為每個字段返回正確的值。

  3. 繪圖范圍的length應為max - min ,而不是max 在這種情況下,由於min為零,因此無關緊要,但在其他情況下則很重要。

Core Plot示例應用程序中有許多條形圖示例。 Plot Gallery應用程序是一個很好的起點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM