0
votes

I'm using Core Plot in an iOS-Application and want to format the steps of axis. All I get is steps of 0.5 and I don't know what else to change. My tick Locations should by 5, 10, 15 and 20.

Here is the code that draws my axis:

-(void) addAxis{

    // Create grid line styles
    CPTMutableLineStyle *majorGridLineStyle = [CPTMutableLineStyle lineStyle];
    majorGridLineStyle.lineWidth = 1.0f;
    majorGridLineStyle.lineColor = [[CPTColor whiteColor] colorWithAlphaComponent:0.75];

    NSSet *majorTickLocations = [NSSet setWithObjects:[NSDecimalNumber zero],
                                 [NSDecimalNumber numberWithUnsignedInteger:5],
                                 [NSDecimalNumber numberWithUnsignedInteger:10],
                                 [NSDecimalNumber numberWithUnsignedInteger:15],
                                 [NSDecimalNumber numberWithUnsignedInteger:20],
                                 nil];

    // Create axes
    CPTXYAxisSet *axisSet = (CPTXYAxisSet *)self.graph.axisSet;
    CPTXYAxis *x = axisSet.xAxis;
    {
        x.labelingPolicy = CPTAxisLabelingPolicyLocationsProvided;
        x.tickDirection = CPTSignNone;
        x.majorTickLocations = majorTickLocations;
        x.labelOffset = 6.0;
        x.labelRotation = M_PI/2;
        x.visibleRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0.0f) length:CPTDecimalFromFloat(19.0f)];
        x.gridLinesRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0.0f) length:CPTDecimalFromFloat(30.0f)];
        x.title = @"Jahre";
        x.titleOffset = 35.0f;
        x.titleLocation = CPTDecimalFromFloat(x.visibleRange.lengthDouble / 2.0);
        x.plotSpace = self.barPlotSpace;
    }

    CPTXYAxis *y = axisSet.yAxis;
    {
        y.labelingPolicy = CPTAxisLabelingPolicyLocationsProvided;
        y.majorTickLocations = majorTickLocations;
        y.minorTicksPerInterval = 0;
        y.preferredNumberOfMajorTicks = 8;
        y.majorGridLineStyle = majorGridLineStyle;
        y.axisLineStyle = nil;
        y.majorTickLineStyle = nil;
        y.minorTickLineStyle = nil;
        y.labelOffset = 10.0;
        y.visibleRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0.0f) length:CPTDecimalFromFloat(30.0f)];
        y.gridLinesRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0.0f) length:CPTDecimalFromFloat(18.5f)];
        y.title = @"Sparbetrag";
        y.titleOffset = 40.0f;
        y.titleLocation = CPTDecimalFromFloat(y.visibleRange.lengthDouble / 2.0);
        y.plotSpace = barPlotSpace;
    }

    // Set axes
    self.graph.axisSet.axes = [NSArray arrayWithObjects:x, y, nil];
}
2

2 Answers

3
votes

Found the solution: Applying a theme changes the painting-behavior of the plot. If I don't apply a theme - everything is fine.

For this is not very intuitive. I would expect that a theme only changes colors or that some aspects can be overridden.

0
votes

That code should work fine--you'll end up with tick marks and labels at 0, 5, 10, 15, and 20. The settings for visibleRange and gridLinesRange may not be right--leave them at the default of nil to have the axes and grid lines extend the full width and height of the plot area.

If you want to change the number format of the labels, set the labelFormatter to a new NSNumberFormatter object configured to give the number format you want.