Основной график, как изменить цвет меток отрицательной оси - PullRequest
1 голос
/ 29 января 2012

Я делаю график в target-c, используя библиотеку core-plot, я хочу изменить цвет меток отрицательной оси? Как я могу это сделать?

1 Ответ

4 голосов
/ 30 января 2012

Есть как минимум три разных способа сделать это, в зависимости от того, насколько вам нужна гибкость.

  1. Используйте две оси Y. Установите их одинаково, за исключением того, что установите видимый диапазон на один, чтобы покрыть положительные значения, а другой отрицательные значения. Установите labelTextStyle и / или labelFormatter для каждого по желанию.

  2. Используйте делегат оси и реализуйте метод делегата -axis:shouldUpdateAxisLabelsAtLocations:. Верните НЕТ и сделайте пользовательские метки в каждом из указанных мест. Это работает с любой политикой маркировки.

    -(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. Это наиболее гибкий, но также и самый эффективный способ, поскольку вам необходимо вычислить расположение отметок в дополнение к созданию пользовательских меток.

...