Paul Peelen
Paul Peelen

Reputation: 10329

s7graphview example

I am looking for an graph library for the iPhone which allowes me to set texts as values on the X-axis. After a quick look at core-plot, it seems its uncapable to do so. I stumbled over s7graphview but can't seem to get it working.

Is there anyone who did got it working, and might be able to share it with me? Or any links to some examples? It think my brain just shut off cause its late, but I am giving it a try ;)

Best regards, Paul Peelen

Upvotes: 0

Views: 2899

Answers (2)

Brad Larson
Brad Larson

Reputation: 170317

Core Plot does indeed support custom tick labels on the X axis: alt text
(source: sunsetlakesoftware.com)

To produce these custom labels, you just need to set the labeling policy of the X axis to CPAxisLabelingPolicyNone and provide your own. For example, you can do the following to replicate the above drawing (in the Core Plot iPhone test application):

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:@"Label A", @"Label B", @"Label C", @"Label D", @"Label E", nil];
NSUInteger labelLocation = 0;
NSMutableArray *customLabels = [[NSMutableArray alloc] initWithCapacity:[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];

There's no need to subclass CPAxis to add these labels.

Upvotes: 2

Madhup Singh Yadav
Madhup Singh Yadav

Reputation: 8114

You can change the label names as

-(NSArray *)newAxisLabelsAtLocations:(NSArray *)locations
{
    NSMutableArray *newLabels = [[NSMutableArray alloc] initWithCapacity:locations.count];
    for ( NSDecimalNumber *tickLocation in locations ) {
        NSString *labelString = [self.labelFormatter stringForObjectValue:tickLocation];
        CPAxisLabel *newLabel = [[CPAxisLabel alloc] initWithText:[NSString stringWithFormat:@"Day %@",labelString] textStyle:self.labelTextStyle];
        //[newLabel setTextColor:[CPColor whiteColor]];
        newLabel.tickLocation = [tickLocation decimalValue];
        newLabel.rotation = self.labelRotation;
        switch ( self.tickDirection ) {
            case CPSignNone:
                newLabel.offset = self.labelOffset + self.majorTickLength / 2.0f;
                break;
            case CPSignPositive:
            case CPSignNegative:
                newLabel.offset = self.labelOffset + self.majorTickLength;
                break;
        }
        [newLabels addObject:newLabel];
        [newLabel release];
    }
    return newLabels;
}

in the CPAxis.m in core-plot

Hope this helps... ;)

Upvotes: 1

Related Questions