2010-12-01 41 views
1

J'utilise le tracé de base pour tracer environ 2000 points de données. Ils chargent très bien, mais je ne vois que une ligne lisse:Tracé principal générant une ligne plate, plage X ou Y incorrecte?

alt text

Je ne sais pas pourquoi il est juste une ligne à plat plutôt que de montrer un graphique de toutes mes valeurs qui sont dans une large gamme. Ai-je fait quelque chose de mal avec la mise en place de l'espace de la parcelle?

CPXYPlotSpace *plotSpace = (CPXYPlotSpace *)graph.defaultPlotSpace; 
plotSpace.allowsUserInteraction = NO; 
plotSpace.xRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(0.0) length:CPDecimalFromFloat(num_points)]; 
plotSpace.yRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(0.0) length:CPDecimalFromFloat(num_points)]; 

Voici ma méthode de numberForPlot ainsi:

-(NSNumber *)numberForPlot:(CPPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index 
{ 
    NSNumber *num = [sortedArray objectAtIndex:index]; 
    return num; 
} 

Toutes les idées ce que je fais mal ici?

+0

Je ne comprends pas comment cela fonctionne frameworks, mais il semble que vous faites à la fois votre gamme et le domaine vont de 0 au nombre des points de données que vous avez (1500 je devine?). Peut-être que si vous aviez une plage et un domaine appropriés, les points s'étendraient et ne sembleraient pas être la ligne que vous avez. –

+0

Je pense que vous avez raison. Comment pourrais-je calculer une plage appropriée? –

Répondre

4

Il y a deux questions différentes:

  1. Les plages de l'espace de terrain sont données en coordonnées données. Vous pouvez calculer vous-même les plages ou utiliser la méthode de l'espace de placette -scaleToFitPlots: pour les calculer automatiquement. Voir ma réponse à your related question sur le forum de discussion du trac Core pour savoir comment calculer les plages manuellement.

  2. Votre -numberForPlot:field:recordIndex: ne tient pas compte du paramètre sur le terrain. Vous renvoyez la même valeur pour les deux CPScatterPlotFieldX et CPScatterPlotFieldY, d'où la ligne diagonale.

Une solution possible:

-(NSNumber *)numberForPlot:(CPPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index 
{ 
    NSNumber *num = nil; 

    switch (fieldEnum) { 
    case CPScatterPlotFieldX: 
     num = [NSNumber numberWithUnsignedInteger:index]; 
     break; 
    case CPScatterPlotFieldY: 
     num = [sortedArray objectAtIndex:index]; 
     break; 
    } 

    return num; 
} 

Eric

+0

Merci, cela a vraiment aidé et je suis en mesure d'obtenir un graphique d'aspect normal maintenant. –