开发者

CORE PLOT add one more Graph in Vertical BarChart

Hi I want to make bar chart as show开发者_开发技巧n here

CORE PLOT add one more Graph in Vertical BarChart

I want to plot graph using coreplot example : (coreplot gallery- Vertical Bar Chart)

Currently default code plots the graph as shown below

CORE PLOT add one more Graph in Vertical BarChart

How can I achieve this?

I tried adding another graph but didn't work out well.

Please Help and Suggest

Thanks


Here is my solution:

CORE PLOT add one more Graph in Vertical BarChart

In your code you need to add the following:

-(NSNumber *)numberForPlot:(CPPlot *)plot
                 field:(NSUInteger)fieldEnum
           recordIndex:(NSUInteger)index
{
    if (plot.identifier==@"locked") {
        switch ( fieldEnum ) {
            case CPBarPlotFieldBarLocation:
                return (NSDecimalNumber *)[NSDecimalNumber numberWithUnsignedInteger:index];
            case CPBarPlotFieldBarLength:
                return [self.lockedPercentage objectAtIndex:index];
            }
    }else if (plot.identifier==@"occupied") {
        switch ( fieldEnum ) {
            case CPBarPlotFieldBarLocation:
                return (NSDecimalNumber *)[NSDecimalNumber numberWithUnsignedInteger:index];
            case CPBarPlotFieldBarLength:
                return [self.occupiedPercentage objectAtIndex:index];
        }
    }else if (plot.identifier==@"empty") {
        switch ( fieldEnum ) {
            case CPBarPlotFieldBarLocation:
                return (NSDecimalNumber *)[NSDecimalNumber numberWithUnsignedInteger:index];
            case CPBarPlotFieldBarLength:
                return [self.emptyPercentage objectAtIndex:index];
        }
    }
    return nil;
}

The lines plot.identifier are here important, they check which data to take, here occupied empty or locked.

Of course you need to set these identifiers, I do this in a -(void) loadgraph:

//  Bar plot Locked
CPBarPlot *barPlot = [CPBarPlot tubularBarPlotWithColor:[CPColor blueColor] horizontalBars:NO];
barPlot.dataSource = self;
barPlot.baseValue = CPDecimalFromString(@"0");
barPlot.barOffset = 0.0f+viewOffset;
barPlot.barWidth = 15.0f;
barPlot.identifier = @"occupied";

[graph addPlot:barPlot toPlotSpace:plotSpace];

Here one of my identifier is set. To display values below the x-axe you need to change your range:

    plotSpace.yRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(0.0f) length:CPDecimalFromFloat(100.0f)];

Hope this helps.


This is how I do this:

    // Define some custom labels for the data elements

customTickLocations = [NSArray arrayWithObjects: 
                           [NSDecimalNumber numberWithInt:10], 
                           [NSDecimalNumber numberWithInt:20],
                           [NSDecimalNumber numberWithInt:30],
                           [NSDecimalNumber numberWithInt:40],
                           [NSDecimalNumber numberWithInt:50],
                           [NSDecimalNumber numberWithInt:60],
                           [NSDecimalNumber numberWithInt:70],
                           [NSDecimalNumber numberWithInt:80],
                           [NSDecimalNumber numberWithInt:90],
                           [NSDecimalNumber numberWithInt:100],
                           nil];

NSArray *xAxisLabels = [NSArray arrayWithObjects:@"10%", @"20%", @"30%",
                            @"40%", @"50%", @"60%",@"70%",@"80%",@"90%",@"100%", nil];

labelLocation = 0;
customLabels = [NSMutableArray arrayWithCapacity:[xAxisLabels count]];

for (NSNumber *tickLocation in customTickLocations) {
    CPAxisLabel *newLabel = [[CPAxisLabel alloc] initWithText: [xAxisLabels objectAtIndex:labelLocation++] 
                                                    textStyle:y.labelTextStyle];
    newLabel.tickLocation = [tickLocation decimalValue];
    newLabel.offset = y.labelOffset;
    [customLabels addObject:newLabel];
    //[newLabel release];
}

y.axisLabels =  [NSSet setWithArray:customLabels];
y.majorTickLocations =  [NSSet setWithArray:customTickLocations];

You define 2 array, one with the labels and one with the values where to put them, define "CPXAxisLabel"s and put them in another array, and this array you can put on your graph. Hope this helps.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜