核心情节,如何改变负轴刻度标签的颜色

时间:2012-01-29 17:07:59

标签: objective-c core-plot

我使用核心图库在objective-c中制作图表,我想更改负轴标签的颜色?我怎么能这样做?

1 个答案:

答案 0 :(得分:4)

至少有三种不同的方法可以做到这一点,具体取决于您需要多大的灵活性。

  1. 使用两个y轴。将它们设置为相同,除了将可见范围设置为一个以覆盖正值而另一个设置为负值。根据需要为每个设置labelTextStyle和/或labelFormatter

  2. 使用轴委托并实施-axis:shouldUpdateAxisLabelsAtLocations:委托方法。返回NO并在每个提供的位置制作自定义标签。这适用于任何标签政策。

    -(BOOL)axis:(CPTAxis *)axis shouldUpdateAxisLabelsAtLocations:(NSSet *)locations
    {
        static CPTTextStyle *positiveStyle = nil;
        static CPTTextStyle *negativeStyle = nil;
    
        NSNumberFormatter *formatter = axis.labelFormatter;
        CGFloat labelOffset          = axis.labelOffset;
        NSDecimalNumber *zero        = [NSDecimalNumber zero];
    
        NSMutableSet *newLabels = [NSMutableSet set];
    
        for ( NSDecimalNumber *tickLocation in locations ) {
            CPTTextStyle *theLabelTextStyle;
    
            if ( [tickLocation isGreaterThanOrEqualTo:zero] ) {
                if ( !positiveStyle ) {
                    CPTMutableTextStyle *newStyle = [axis.labelTextStyle mutableCopy];
                    newStyle.color = [CPTColor greenColor];
                    positiveStyle  = newStyle;
                }
                theLabelTextStyle = positiveStyle;
            }
            else {
                if ( !negativeStyle ) {
                    CPTMutableTextStyle *newStyle = [axis.labelTextStyle mutableCopy];
                    newStyle.color = [CPTColor redColor];
                    negativeStyle  = newStyle;
                }
                theLabelTextStyle = negativeStyle;
            }
    
            NSString *labelString       = [formatter stringForObjectValue:tickLocation];
            CPTTextLayer *newLabelLayer = [[CPTTextLayer alloc] initWithText:labelString style:theLabelTextStyle];
    
            CPTAxisLabel *newLabel = [[CPTAxisLabel alloc] initWithContentLayer:newLabelLayer];
            newLabel.tickLocation = tickLocation.decimalValue;
            newLabel.offset       = labelOffset;
    
            [newLabels addObject:newLabel];
    
            [newLabel release];
            [newLabelLayer release];
        }
    
        axis.axisLabels = newLabels;
    
        return NO;
    }
    
  3. 使用CPTAxisLabelingPolicyNone标签政策。这是最灵活的,但也是最多的工作,因为除了制作自定义标签之外,您还必须计算刻度线位置。