Основной график: ось чередования полос и заливок с пользовательскими метками осей - PullRequest
0 голосов
/ 23 февраля 2012

Я использую библиотеку Core Plot для рисования графиков на iOS.Я хочу добавить цвета между линиями сетки YAXIS.Мне удалось сделать это с помощью установки свойства alternatingBandFills оси.Однако я также должен использовать пользовательские метки на yAxis, и когда я предоставляю пользовательские метки, свойство alternatingBandFills по какой-то причине не работает.

Любая помощь по добавлению цветов в промежутки между линиями сетки на yAxis, а также по использованию пользовательских меток будет высоко ценится.

Код, который я сейчас использую, выглядит так:1005 *

    CPTXYAxisSet *axisSet = (CPTXYAxisSet *)self.hostedGraph.axisSet;
    CPTXYAxis *yAxis = axisSet.yAxis; 

    yAxis.orthogonalCoordinateDecimal = CPTDecimalFromDouble(minValueX);        
    yAxis.labelingPolicy = CPTAxisLabelingPolicyNone;

    NSArray *yAxisTickLocations = [NSArray arrayWithObjects:
                                   [NSDecimalNumber numberWithDouble:lowerRedRangeFrom],
                                   [NSDecimalNumber numberWithDouble:lowerOrangeRangeFrom],
                                   [NSDecimalNumber numberWithDouble:greenRangeFrom],
                                   [NSDecimalNumber numberWithDouble:upperOrangeRangeFrom],
                                   [NSDecimalNumber numberWithDouble:upperRedRangeFrom],
                                   [NSDecimalNumber numberWithDouble:upperRedRangeTo],
                                   nil];
    NSArray *yAxisLabels = [NSArray arrayWithObjects:@"Label1",@"Label2", @"Label3",@"Label4",@"Label5",@"Label6", nil];

    NSUInteger labelLocationY = 0;
    NSMutableArray *customLabelsY = [NSMutableArray arrayWithCapacity:[yAxisLabels count]];
    for (NSNumber *tickLocation in yAxisTickLocations) {

        CPTAxisLabel *newLabel = [[CPTAxisLabel alloc] initWithText: [yAxisLabels objectAtIndex:labelLocationY++] textStyle:axisSet.xAxis.labelTextStyle];
        newLabel.tickLocation = [tickLocation decimalValue];
        newLabel.offset = axisSet.xAxis.labelOffset + axisSet.xAxis.majorTickLength;
        newLabel.rotation = M_PI/4;
        [customLabelsY addObject:newLabel];
    }

    axisSet.yAxis.axisLabels =  [NSSet setWithArray:customLabelsY];
    yAxis.alternatingBandFills = [NSArray arrayWithObjects:
                                  [CPTColor redColor],
                                  [CPTColor orangeColor],
                                  [CPTColor greenColor],
                                  [CPTColor orangeColor],
                                  [CPTColor redColor], nil];

1 Ответ

1 голос
/ 23 февраля 2012

Я понял это:

Политика маркировки оси должна быть: CPTAxisLabelingPolicyLocationsProvided, для которой в документации указано: «Пользователь устанавливает местоположения тиков; ось создает метки».

Теперь нам нужно только указать расположение галочек.Это делается путем создания NSSet объекта с местоположениями.Затем мы должны установить свойство majorTickLocations оси.

Так что мой код теперь выглядит так:

    CPTXYAxisSet *axisSet = (CPTXYAxisSet *)self.hostedGraph.axisSet;
    CPTXYAxis *yAxis = axisSet.yAxis;

    yAxis.orthogonalCoordinateDecimal = CPTDecimalFromDouble(minValueX);        
    yAxis.labelingPolicy = CPTAxisLabelingPolicyLocationsProvided;

    NSSet *majorTickLocations = [NSSet setWithObjects:
                                 [NSDecimalNumber numberWithDouble:lowerRedRangeFrom],
                                 [NSDecimalNumber numberWithDouble:lowerOrangeRangeFrom],
                                 [NSDecimalNumber numberWithDouble:greenRangeFrom],
                                 [NSDecimalNumber numberWithDouble:upperOrangeRangeFrom],
                                 [NSDecimalNumber numberWithDouble:upperRedRangeFrom],
                                 [NSDecimalNumber numberWithDouble:upperRedRangeTo],
                                 nil];
    yAxis.majorTickLocations = majorTickLocations;

    yAxis.alternatingBandFills = [NSArray arrayWithObjects:
                                  [CPTColor redColor],
                                  [CPTColor orangeColor],
                                  [CPTColor greenColor],
                                  [CPTColor orangeColor],
                                  [CPTColor redColor], nil];
...