Как отобразить значения баров на CorePlot -Штабелированная гистограмма

Я использовал core-plot чтобы отобразить гистограмму в моем приложении, я следовал этому хорошему руководству по реализации гистограммы, теперь график выглядит следующим образом. " http://www.gilthonwe.com/2012/06/09/stacked-bar-chart-coreplot-ios/"

Я использовал приведенный ниже код для отображения значений бара, пока пользователь касается их на экране.

 -(void)barPlot:(CPTBarPlot *)plot barWasSelectedAtRecordIndex:(NSUInteger)index
    {
        if (plot.isHidden == YES) {
            return;
        }
        static CPTMutableTextStyle *style = nil;
        if (!style) {
            style = [CPTMutableTextStyle textStyle];
            style.color= [CPTColor yellowColor];
            style.fontSize = 16.0f;
            style.fontName = @"Helvetica-Bold";
        }

        NSNumber *price = [NSNumber numberWithDouble:[self doubleForPlot:plot field:CPTBarPlotFieldBarTip recordIndex:index]];
        if (!self.priceAnnotation) {
            NSNumber *x = [NSNumber numberWithInt:0];
            NSNumber *y = [NSNumber numberWithInt:0];
            NSArray *anchorPoint = [NSArray arrayWithObjects:x, y, nil];
            self.priceAnnotation = [[CPTPlotSpaceAnnotation alloc] initWithPlotSpace:plot.plotSpace anchorPlotPoint:anchorPoint];
        }
        static NSNumberFormatter *formatter = nil;
        if (!formatter) {
            formatter = [[NSNumberFormatter alloc] init];
            [formatter setMaximumFractionDigits:2];
        }
        // 5 - Create text layer for annotation
        NSString *priceValue = [formatter stringFromNumber:price];
        CPTTextLayer *textLayer = [[CPTTextLayer alloc] initWithText:priceValue style:style];
        self.priceAnnotation.contentLayer = textLayer;
        NSLog(@"barWasSelectedAtRecordIndex %lu", (unsigned long)index);
        NSInteger plotIndex = 0;
        if ([plot.identifier isEqual:[sets objectForKey:@"Due"]] == YES) {
            plotIndex = 0;
        } else if ([plot.identifier isEqual:[sets objectForKey:@"Overdue"]] == YES) {
            plotIndex = 1;
        } else if ([plot.identifier isEqual:[sets objectForKey:@"Paid"]] == YES) {
            plotIndex = 2;
        }

        CGFloat x =10.00;
        NSNumber *anchorX = [NSNumber numberWithFloat:x];
        CGFloat y = 10.00;
        NSNumber *anchorY = [NSNumber numberWithFloat:y];
        self.priceAnnotation.anchorPlotPoint = [NSArray arrayWithObjects:anchorX, anchorY, nil];
        // 8 - Add the annotation
        [plot.graph.plotAreaFrame.plotArea addAnnotation:self.priceAnnotation];
    }

Смотрите рисунок для ответа приведенного выше кода

введите описание изображения здесь

Здесь я сталкиваюсь с парой вопросов

1. Значения не отображаются в точном положении над выбранной полосой.

  1. Рассмотрим значение синей полосы =8, значение зеленой полосы =6, значение красной полосы =7

Если я нажимаю, синяя полоса отображает точное значение этой полосы. Display Value=8

Если я нажму на зеленую полосу, я получу совокупное значение как синей, так и зеленой полосы.Display Value=14

Если я нажму на красную полосу, я получу суммарное значение синей, зеленой и красной полос.Display Value=21

Как отобразить точное значение бара с точным положением над выбранной полосой, пока пользователь касается полос на экране?

1 ответ

Решение

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

Другие вопросы по тегам