IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Changer la valeur de ylim dans un plot [Débutant(e)]


Sujet :

R

  1. #1
    Membre confirmé
    Homme Profil pro
    Post-Doc Ecologie
    Inscrit en
    Juillet 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Taïwan

    Informations professionnelles :
    Activité : Post-Doc Ecologie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2007
    Messages : 76
    Par défaut Changer la valeur de ylim dans un plot
    Bonjour,

    Je suis tout nouveau, tout neuf dans le monde de R.
    Et j'ai déjà une petite question...

    J'ai fait une recherche sur le forum et n'ai pas trouvé la réponse à ma question. Après, il se peut que je l'ai mal posée. De même j'ai lu la section du Guide pour débutant de E. Paradis, celui de J. Barnier pour les Sociologues, de même qu'un guide en Anglais de A.Robinson. Sans succès.
    J'ai aussi consulté l'aide de R, mais j'avoue que je m'y suis un peu perdu.
    Pourtant mon problème est tout bête... Et doit pas être difficile à résoudre.
    Je voudrais changer l'option ylim d'une fonction Fonction plot qui a été complétée par plusieurs fonctions secondaires points(x,y) et lignes(x,y)

    Je n'ai pas renseigné au préalable l'option ylim dans ma fonction plot(x,y). J'imagine que cette option prend donc une valeur par défaut.
    Par la suite, les valeurs de mes variables en y, ajoutées avec les fonctions secondaires, sont supérieures à celles de la variable initiale de plot(x,y).
    De fait, je ne vois pas tous mes points sur le graphique.
    Je voudrais donc, changer le ylim de mon graphique mais à posteriori.
    J'ai cru dans un premier temps qu'il fallait utiliser la fonction par() avec l'un des paramètres, mais je crois que ylim n'est pas un paramètre mais bel et bien une option d'une fonction de classe supérieure.

    Puis j'ai essayé la fonction plot.window pensant pouvoir l'utiliser sur le graphique en cours ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plot.window(xlim=range,ylim=range)
    (bon là j'avais aussi touché à xlim, parce que je crois que cette fonction ne veut pas juste ylim, il lui faut aussi xlim). Je n'y suis pas arrivé non plus.
    Je n'ai pas de message d'erreur. Mais sur mon graphique rien ne change... Ou ne change visuellement.

    J'ai aussi tenté un tout simple:
    Sans succès.
    Donc voilà si quelqu'un sait comment éclairer ma lanterne...
    Merci par avance.

  2. #2
    Membre expérimenté Avatar de abysse
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 222
    Par défaut
    Voici le code pour modifier les axes des x et des y

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plot(x,y,ylim=c(0,10),xlim=c(0,5))

  3. #3
    Membre confirmé
    Homme Profil pro
    Post-Doc Ecologie
    Inscrit en
    Juillet 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Taïwan

    Informations professionnelles :
    Activité : Post-Doc Ecologie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2007
    Messages : 76
    Par défaut
    Merci Abysse pour ta réponse.
    Mais si je fais ça, je ne "replote" pas mes premières données?
    Bon en même temps ce n'est pas très grave.
    Je vais voir ce que ça donne.

  4. #4
    Membre expérimenté Avatar de abysse
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 222
    Par défaut
    Je ne comprends pas très bien ta question :"
    Mais si je fais ça, je ne "replote" pas mes premières données?"

    Pourquoi tu as plusieurs jeux de données, mets un exemple

  5. #5
    Membre confirmé
    Homme Profil pro
    Post-Doc Ecologie
    Inscrit en
    Juillet 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Taïwan

    Informations professionnelles :
    Activité : Post-Doc Ecologie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2007
    Messages : 76
    Par défaut
    Oui tu as raison, je ne suis pas clair.
    Voilà ce que je tape:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    > plot(a[,1],a[,2])
    > points(a[,1],a[,3],col="red")
    > lines(a[,1],a[,3],col="red")
    > points(a[,1],a[,4],col="green")
    > lines(a[,1],a[,4],col="green")
    > points(a[,1],a[,5],col="cyan")
    > lines(a[,1],a[,5],col="cyan")
    Avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    a[,1]=1980:2007
    a[,2] variant entre 0 et 1 de même longueur que a[,1]
    a[,3] variant entre 0 et 100 de même longueur que a[,1]
    a[,4] variant entre 0 et 1000 de même longueur que  a[,1]
    a[,5] variant entre 0 et 10000 de même longueur que  a[,1]
    Donc quand je fais ça, le graphique reste avec l'échelle des x variant entre 0 et 1 (premier plot(a[,1],a[,2]) je pense).
    Même si mes données sont tracées (je vois parfois des valeurs égales à 0 pour chaque vecteur a[,.]), l'axe des Y reste bloqué à 1 au max.
    Mais, effectivement, je pourrais renseigner ylim au premier plot.
    Mais je voulais savoir si ça pouvait se faire après, une fois le graph tracé.

    Si je retape:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    > plot(a[,1],a[,5],ylim=c(0,5000),xlim=c(1980,2007))
    Je recrée un graphique.

    Voilà, je ne sais pas si je suis plus clair là.

  6. #6
    Membre expérimenté Avatar de abysse
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 222
    Par défaut
    Non tu n'es pas vraiment clair
    mets un exemple avec des données

    tu mets que tes valeurs varient entre 0 et 1 jusqu'à 10000 et tu fixes ylim à 5000

  7. #7
    Membre confirmé
    Homme Profil pro
    Post-Doc Ecologie
    Inscrit en
    Juillet 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Taïwan

    Informations professionnelles :
    Activité : Post-Doc Ecologie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2007
    Messages : 76
    Par défaut
    Voilà mes données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    1	Years  1         2	      3	            4
    2	1980	  0	32.38	   470.70	2722.47
    3	1981	  0	17.16	   701.51	1499.63
    4	1982	  0	43.26	   226.81	9481.20
    5	1983	  0	41.80	   964.87	8559.27
    6	1984	  0	32.01	   355.19	   63.17
    7	1985	  0	96.50	   224.67	5033.57
    8	1986	  0	30.99	   420.65	1470.34
    9	1987	  0	21.59	   618.50	6365.05
    10	1988	  0	52.68	   208.74	5329.90
    11	1989	  0	98.67	   670.78	7640.69
    12	1990	  0	  2.59	   339.17	9496.15
    13	1991	  0	94.77	   968.63	3319.40
    14	1992	  0	54.66	      4.09	5901.18
    15	1993	  0	68.96	   962.43	3207.70
    16	1994	  0	89.14	   831.24	4657.59
    17	1995	  0	41.51	   891.85	4686.89
    18	1996	  0	92.97	   872.31	4409.18
    19	1997	  0	25.52	   836.52	1188.35
    20	1998	  0	22.70	   716.28	8932.50
    21	1999	  0	21.06	   891.78	6922.61
    22	2000	  0	29.84	   727.60	9989.62
    23	2001	  0	71.84	   469.51	7852.48
    24	2002	  0	48.80	   409.52	6427.61
    25	2003	  0	84.28	   723.94	8923.34
    26	2004	  0	47.23	   892.33	9532.47
    27	2005	  0	  9.26	   102.29	7536.32
    28	2006	  0	38.95	   546.81	4628.91
    29	2007	  0	86.13	     20.75	3277.59
    Voilà le code que je tape:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    > plot(a[,1],a[,2])
    > lines(a[,1],a[,2])
    > points(a[,1],a[,3],col="blue");lines(a[,1],a[,3],col="blue")
    > points(a[,1],a[,4],col="red");lines(a[,1],a[,4],col="red")
    > points(a[,1],a[,5],col="green");lines(a[,1],a[,5],col="green")
    On peut voir ce que j'obtiens dans la miniature.
    L'axe des y s’arrête à +1, on voit sur le graphique les valeurs plus basses de deux autres distributions. Mais le reste, est en dehors du graphique.

    Effectivement, je pourrais choisir d'indiquer "ylim" dès la première ligne de mon code, comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    > plot(a[,1],a[,2],ylim=c(0,max(a)))
    > lines(a[,1],a[,2])
    > points(a[,1],a[,3],col="blue");lines(a[,1],a[,3],col="blue")
    > points(a[,1],a[,4],col="red");lines(a[,1],a[,4],col="red")
    > points(a[,1],a[,5],col="green");lines(a[,1],a[,5],col="green")
    Mais dans ce cas je définis "ylim" en faisant le graphique, je voudrais modifier "ylim", après que le graphique soit affiché (parce que je ne suis pas certain de vouloir utiliser la valeur maximale de mes données).

    En gros je voudrais pouvoir écrire un code comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    > plot(a[,1],a[,2])
    > lines(a[,1],a[,2])
    > points(a[,1],a[,3],col="blue");lines(a[,1],a[,3],col="blue")
    > points(a[,1],a[,4],col="red");lines(a[,1],a[,4],col="red")
    > points(a[,1],a[,5],col="green");lines(a[,1],a[,5],col="green")
    > set(ylim=cequejeveux)
    Images attachées Images attachées  

  8. #8
    Membre expérimenté Avatar de abysse
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 222
    Par défaut
    Le plus simple c'est d'utiliser matplot pour tracer tes courbes
    Il permet de tracer toutes les courbes selon la même abscisse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    mat1 = matrix(c(1980,1981,1982,1983,1984,1985,0,0,0,0,0,0,2,4,5,10,40,100), nrow = 6)
    matplot(mat1[,1] , mat1[,2:3], type = "b", las=1,
            lty = c("dotted", "solid"),
            lwd = 2, pch = c(1, 2),
            cex = 0.8, col = c("red", "blue"),
            xlab = "Année", ylab = "Valeur", main = "titre")
    legend("topleft",legend=c("titre1","titre2"),col = c("red", "blue"),pch = c(1, 2))

  9. #9
    Membre confirmé
    Homme Profil pro
    Post-Doc Ecologie
    Inscrit en
    Juillet 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Taïwan

    Informations professionnelles :
    Activité : Post-Doc Ecologie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2007
    Messages : 76
    Par défaut
    Merci effectivement, ça fonctionne bien. L'échelle des Y s'ajuste à mes plus fortes valeurs automatiquement. Et je peux spécifier moi-même les valeurs que je veux (si je ne veux pas celles automatiquement choisies).

    Bon par contre, je reste toujours sur ma faim Je sais, je suis chiant.
    Mais comment faire pour changer les ylim, une fois le graphique tracé (parce que même si finalement j'arrive à ce que je veux avec matplot, je me pose quand même la question, au cas où...).

    Par exemple, avec mes données et en utilisant matplot, la valeur max de l'axe des Y est 10000. Je peux mettre plus en renseignant ylimdans la fonction avant d’exécuter matplot.
    Mais une fois que le graph est tracé, y a-t-il une façon de changer cette ylim?

    J'ai ressayé avec la fonction par, mais je n'ai pas réussi, pareil avec la fonction plot.window (bon je pense que de toute façon cette fonction n'est pas adapté aux graphiques mais aux fenêtres des graphiques, donc je me plantais de toute façon dès le début).

    Mais sinon encore merci pour matplot.

  10. #10
    Membre expérimenté Avatar de abysse
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 222
    Par défaut
    par est pour les paramètres graphiques
    ylim tu peux le changer mais il faut relancer les lignes de code pour que les modifications soient prises en compte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    mat1 = matrix(c(1980,1981,1982,1983,1984,1985,0,0,0,0,0,0,2,4,5,10,40,100), nrow = 6)
    matplot(mat1[,1] , mat1[,2:3], type = "b", las=1,ylim=c(0,20),
            lty = c("dotted", "solid"),
            lwd = 2, pch = c(1, 2),
            cex = 0.8, col = c("red", "blue"),
            xlab = "Année", ylab = "Valeur", main = "titre")
    legend("topleft",legend=c("titre1","titre2"),col = c("red", "blue"),pch = c(1, 2))

  11. #11
    Membre confirmé
    Homme Profil pro
    Post-Doc Ecologie
    Inscrit en
    Juillet 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Taïwan

    Informations professionnelles :
    Activité : Post-Doc Ecologie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2007
    Messages : 76
    Par défaut
    Oui mais si je relance un code, avec cette fois ylim dedans, je ne change pas le ylim de la figure, je crée une autre figure avec le ylim voulu.
    Apparemment, il semble impossible de gérer ylim d'une figure après que celle-ci soit tracée, il faut renseigner ylim dans la fonction graphique avant son traçage (si je puis dire) ou recréer un graphique dans une nouvelle figure.

  12. #12
    Membre expérimenté Avatar de abysse
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 222
    Par défaut
    Oui je ne crois pas qu'il existe un moyen de changer ylim après
    Je ne vois pas pourquoi tu veux le changer

  13. #13
    Membre confirmé
    Homme Profil pro
    Post-Doc Ecologie
    Inscrit en
    Juillet 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Taïwan

    Informations professionnelles :
    Activité : Post-Doc Ecologie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2007
    Messages : 76
    Par défaut
    Salut Abysse,
    Désolé, ça fait un moment que je ne suis pas passé.
    En fait c'est un vieux réflexe Matlab. Je sais bien qu'il n'est pas bon de vouloir toujours tenter de refaire exactement les mêmes choses...
    Mais je voulais quand même essayer. D'autant que pour ce cas là, il me semblait que ça fonctionnait de la même façon.
    On récupère la valeur d'un paramètre d'un graphique (genre ylim) de la fenêtre active, et on le change juste après la figure.
    Pourquoi je voulais faire ça? Le but étant de faire varier un axe, ça m'arrive parfois quand je sais que des valeurs bien plus supérieures, à celles contenues dans mon jeu de données et tracées dans le graph, existent. Donc pour comparer un peu la tendance d'une courbe, je joue avec l'axe des y (pour voir l’aplanissement de la courbe ou pas par exemple).
    Dans Matlab, on peut le faire après que le graphique soit tracé, et sans créer de nouveau graphique. Dans R on peut pas, on repasse par un nouveau graph.
    Maintenant je sais
    Merci à toi.

  14. #14
    Membre averti
    Homme Profil pro
    Statisticien
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Statisticien
    Secteur : Santé

    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Par défaut
    Bonjour,
    cela est sûrement possible avec les graphiques du package ggplot2.
    Je ne sais pas si cela peut vous aidez, mais bon voici un petit test avec vos données:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    library(ggplot2)
    mat1 = matrix(c(1980,1981,1982,1983,1984,1985,0,0,0,0,0,0,2,4,5,10,40,100), nrow = 6)
    mat1
    colnames(mat1)<-c("annee","var1","var2")
     
     
    g1<-ggplot(as.data.frame(mat1),aes(annee , var1))+geom_line(colour="red",lty="dotted",lwd=2)
    g1
    g1<-g1+geom_line(aes(annee , var2),colour="blue",lty="solid",lwd=2)
    g1
    g1+ylim(0,60)
    g1+ylim(0,150)
    A+ Benoît

  15. #15
    Membre confirmé
    Homme Profil pro
    Post-Doc Ecologie
    Inscrit en
    Juillet 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Taïwan

    Informations professionnelles :
    Activité : Post-Doc Ecologie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2007
    Messages : 76
    Par défaut
    Bonjour benoit.abm. Merci pour ton message.
    Effectivement c'est pas mal comme ça. Par contre certaines données disparaissent (je n'ai pas encore été voir le script en détail, je l'ai juste lancé).
    Si je fais par exemple (et sachant que j'ai des données jusqu'à y=100) :
    Le graphique m'affiche les données, effectivement avec un axe des ordonnées au maximum y=60, mais les données tracées n’atteignent pas la valeur y=60 mais s’arrêtent à y=40 par exemple:
    voir la PJ pour une image
    J'ai un message d'erreur qui me dit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Removed 1 rows containing missing values (geom_path)
    Donc je pense qu'il doit y avoir une relation, encore que je ne sois pas certain qu'il y ait des valeurs manquantes
    Comme je disais, je n'ai pas encore regardé le code. Je voulais d'abord te remercier.
    Images attachées Images attachées  

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/04/2013, 11h06
  2. changer la valeur des données dans une colonne excel et les trier
    Par thewind1 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/01/2011, 22h35
  3. Réponses: 6
    Dernier message: 21/01/2011, 12h25
  4. [RegEx] Changer la valeur d’un attribut dans une chaîne
    Par sara21 dans le forum Langage
    Réponses: 2
    Dernier message: 20/07/2008, 19h31
  5. [C#] changer la valeur d'un datetimepicker dans le code
    Par cortex024 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 15/05/2006, 10h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo