Comment afficher les valeurs de barres sur le graphique à barres CorePlot -Stacked

J'ai utilisé core-plot pour afficher le graphique à barres empilé dans mon application, j'ai suivi ce joli tutoriel pour implémenter le graphique à barres empilées, maintenant le graphique ressemble à ci-dessous. " http://www.gilthonwe.com/2012/06/09/stacked-bar-chart-coreplot-ios/ "

J'ai utilisé le code ci-dessous pour afficher les valeurs de la barre pendant que l'user les touche à l'écran.

  -(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 NSSsortingng *priceValue = [formatter ssortingngFromNumber: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]; } 

Voir la figure pour la réponse du code ci-dessus

entrez la description de l'image ici

Ici, je fais face à deux problèmes

1.Les valeurs ne sont pas affichées à la position exacte au-dessus de la barre sélectionnée.

  1. Considérons la valeur de la barre bleue = 8, la valeur de la barre verte = 6, la valeur de la barre rouge = 7

Si je clique sur la barre bleue affiche la valeur exacte de la barre. Display Value=8

Si je clique sur la barre verte, j'obtiens la valeur cumulative de la valeur de la barre bleue et de la barre verte. Display Value=14

Si je clique sur la barre rouge, j'obtiens la valeur cumulative des barres bleues, vertes et rouges. Display Value=21

Comment afficher la valeur exacte de la barre avec la position exacte sur la barre sélectionnée pendant que l'user touche les barres à l'écran?

Le code dans la question affiche la valeur "tip" de la barre sélectionnée. Dans ce cas, c'est le haut de la barre. Si vous voulez la longueur du segment sélectionné, soustrayez la valeur "base" de la barre.