2010-01-03 10 views
3

Je suis complètement nouveau dans Core Plot et j'ai un graphique à barres qui fonctionne, mais le visuel est inutile pour moi à moins que je ne sache quel objet est représenté dans chaque barre. J'ai vu qu'il y a une méthode appelée 'fieldIdentifiers' mais je ne sais pas comment l'implémenter, et je ne peux pas trouver de documentation (si c'est la bonne méthode). Pouvez-vous me diriger dans la bonne direction? Merci!Comment ajouter des étiquettes aux barres de points CPBarPlot?

Répondre

9

Pour définir manuellement les étiquettes d'un axe dans un diagramme de tracés principaux, vous devez définir la propriété labelling de cet axe sur CPAxisLabelingPolicyNone et fournir les étiquettes vous-même. Par exemple, le code suivant établira des étiquettes personnalisées dans un graphique à barres (tirées de code que je vais ajouter à l'exemple d'application iPhone à un moment donné):

CPXYAxisSet *axisSet = (CPXYAxisSet *)barChart.axisSet; 
CPXYAxis *x = axisSet.xAxis; 
x.labelRotation = M_PI/4; 
x.labelingPolicy = CPAxisLabelingPolicyNone; 
NSArray *customTickLocations = [NSArray arrayWithObjects:[NSDecimalNumber numberWithInt:1], [NSDecimalNumber numberWithInt:5], [NSDecimalNumber numberWithInt:10], [NSDecimalNumber numberWithInt:15], [NSDecimalNumber numberWithInt:20], nil]; 
NSArray *xAxisLabels = [NSArray arrayWithObjects:@"Label A", @"Label B", @"Label C", @"Label D", @"Label E", nil]; 
NSUInteger labelLocation = 0; 
NSMutableArray *customLabels = [[NSMutableArray alloc] initWithCapacity:[xAxisLabels count]]; 
for (NSNumber *tickLocation in customTickLocations) 
{ 
    CPAxisLabel *newLabel = [[CPAxisLabel alloc] initWithText: [xAxisLabels objectAtIndex:labelLocation++] textStyle:x.labelTextStyle]; 
    newLabel.tickLocation = [tickLocation decimalValue]; 
    newLabel.offset = x.labelOffset + x.majorTickLength; 
    newLabel.rotation = M_PI/4; 
    [customLabels addObject:newLabel]; 
    [newLabel release]; 
} 

x.axisLabels = [NSSet setWithArray:customLabels]; 

Ceci définit cinq étiquettes personnalisées (étiquette A, B, C, D et E) aux emplacements 1, 5, 10, 15 et 20 sur l'axe X.

+0

Vous êtes mon héros. J'ai été en mesure de prendre ce que vous avez écrit et de le fusionner dans mon code pour un délicieux tableau d'étiquettes. Avez-vous joué avec la nouvelle fonctionnalité pour définir les étiquettes à l'extrémité des barres? C'est dans CPTestApp pour Mac, mais c'est opaque pour moi. – lelander

+0

Drew vient d'ajouter qu'il y a quelques jours, et je n'arrive pas à comprendre comment cela fonctionne. Cela a quelque chose à voir avec la méthode -barLabelForBarPlot: recordIndex: delegate, mais je ne peux pas répliquer l'effet dans mon code. –

+0

Salut si vous définissez manuellement des étiquettes pour l'axe, lorsque les valeurs des barres de statut sont modifiées, la position des axislabels est perturbée comment résoudre ce problème? – ravoorinandan