Débordement de courbes

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Abdel Zine
Messages : 75
Enregistré le : 28 Nov 2006, 09:56

Débordement de courbes

Messagepar Abdel Zine » 18 Sep 2007, 13:31

Bonjour,

Je dessine plusieurs courbes avec plot(x,y,type='l') mais certaines "débordent" sur l'axe des Y, curieusement se sont les ordonnées comprises entre -5 et 5 qui débordent alors que celles des Y entre -50 et 50 s'affichent correctement.

Comment dois-je procéder pour avoir des sortie correctes, y a t-il une option qui spécifie les bornes de l'axe des Y à utiliser ? (je ne connais pas à l'avance les bornes, je devrais parcourir le fichier des Y pour celà).

Merci bien.

Exemple 1 : affichage correct
Exemple 2 : affichage incorrect
Nul ne peut atteindre l'aube sans passer par le chemin de la nuit. Khalil Gibran.

Eric Pagot
Messages : 195
Enregistré le : 15 Fév 2007, 17:10

Messagepar Eric Pagot » 18 Sep 2007, 13:51

Oui, bien sûr. Il suffit de spécifier les limites de y en donnant les deux bornes (ylim=c(-10,10) par ex).
Probablement que lees coupures dans le graphique sont dues à des arrondis dans l'échelle automatique.
Vétérinaire CTPA

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 18 Sep 2007, 13:57

Bonjour,

en regardant ton graph "incorrect", je suis surpris car si les valeurs depassaient la zone du graph tu n'aurais pas le même genre de graphiques mais des lignes qui s'arrêteraient au niveau de la bôite qui entoure le graph. Ca fait plus penser à des valeurs de y répétées (ou très proches) pour deux valeurs de x successives que réellement une erreur d'affichage. Sinon pour vérificaton tu peux aussi rajouter dans ta commande ylim=range(y).

Maxime

Abdel Zine
Messages : 75
Enregistré le : 28 Nov 2006, 09:56

Messagepar Abdel Zine » 19 Sep 2007, 11:49

Eric, merci pour ylim, mais je ne comprends pas très bien ce que tu veux dire par
Probablement que lees coupures dans le graphique sont dues à des arrondis dans l'échelle automatique


Maxime,
si les valeurs depassaient la zone du graph tu n'aurais pas le même genre de graphiques mais des lignes qui s'arrêteraient au niveau de la bôite qui entoure le graph
Mais c'est justement l'impression que j'avais en regardant mon graphe.
En reprenant le deuxième exemple ("incorrect"), et en positionnant ylim à c(-5,5), soit range(y)/2 ça me donne ce graphe, et j'ai l'impression d'avoir une similitude de "dépassement".

Mais après vérification, il me semble que tu as un sacré coup d'oeil (ou que le mien est très mauvais), car en mettant ylim =c(min(y)-1, max(y)+1), ça me donne ce graphe, et là, je pense que tu as raison.

Pour en avoir le coeur net, j'ai fait un test avec une 50ène de valeurs de x au lieu de 2000, ce qui me donne : graphe, donc cela est bien dû au nombre élevé de x (2000 valeurs) ayant des ordonnées de valeurs très proches.

D'autres suggestions ?

Merci encore.
Nul ne peut atteindre l'aube sans passer par le chemin de la nuit. Khalil Gibran.

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 19 Sep 2007, 12:07

Bonjour,


Il y a quand même une différence entre un graph avec ylim=range(y)/2 et sans ce paramètre. Dans le premier cas tu vas avoir tes lignes verticales qui vont intersecter la bôite autour du graph, alors que dans le deuxième cas tes lignes verticales s'arrêtent avant la boîte. Pour t'en convaincre par défaut la taille de la fenêtre graphique est 8% plus grande que l'amplitude entre le minimum et le maximum de y (vrai aussi pour les x) :

Code : Tout sélectionner

x <- 1:1200
y <- rnorm(1200)
plot(y~x,type="l")
diff(par()$usr[3:4])/diff(range(y))
[1] 1.08
Chose que tu peux aussi vérifier en comparant range(y) avec par()$usr[3:4]. Une autre façon de voir ça est de permettre un tracer en dehors de la fenêtre graphique :

Code : Tout sélectionner

par(xpd=TRUE)
plot(y~x,type="l",ylim=range(y)/2) # la on sort de la fenêtre graphique
plot(y~x,type="l") #la on ne sort pas de la fenêtre graphique

Tu peux aussi représenter les valeurs de y par ordre croissant, plot(sort(y)~x,type="l"), si tu as pas mal de valeurs de y proche tu devrais avoir des paliers.

Tu peux aussi séparer ton graph en plusieurs graph sur une même fenêtre graphique pour étaler un peu les graphiques :

Code : Tout sélectionner

par(mfrow=c(6,1),mar=c(2,2,0.1,0.1),xaxs="i")
for (i in 1:6){
  v <- ((i-1)*200+1):(i*200)
  plot(x[v],y[v],type="l",xlim=range(v)+c(-1,1),ylim=range(y))
}


Maxime

Abdel Zine
Messages : 75
Enregistré le : 28 Nov 2006, 09:56

Thank !

Messagepar Abdel Zine » 22 Sep 2007, 17:49

très intéressant Maxime, j'ignorais l'existance de cette option, je pense d'ailleurs m'en servir pour combiner ça avec la superposition d'autres courbes afin de les comparer, ce qui n'aurait pas été possible avec des graphes très denses comme ceux que je dois dessiner.

Merci ! et désolé du retard de mon feedback
Nul ne peut atteindre l'aube sans passer par le chemin de la nuit. Khalil Gibran.

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 25 Sep 2007, 11:41

Abdel Zine,

Ce que je dis là ne concerne pas ta question, c'est juste qu'en constatant la mauvaise qualité de tes graphiques au format .jpg, je me suis dit que tu ne connais pas la commande savePlot(monfichier, type="jpg").

Abdel Zine
Messages : 75
Enregistré le : 28 Nov 2006, 09:56

Messagepar Abdel Zine » 26 Juil 2008, 18:14

Bonsoir,
Je viens pas souvent ici, je m'excuse Stéphane de ne pas t'avoir répondu plus tôt :)
En fait je ne me souviens pas si j'avais ou non connaissance de la fonction savePlot() à l'époque où j'avais écrit ces précédents messages, mais je l'utilise effectivement dans mes traitements et avec l'option type="jpg", par contre je ne vois pas ce que tu me promoses de faire si tu trouves que mes graphes sont de mauvaises qualité, je reste prenneur.

Merci bien :)
Nul ne peut atteindre l'aube sans passer par le chemin de la nuit. Khalil Gibran.


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité

cron