Formatage de graphiques

Questions sur les fonctions graphiques de R

Modérateur : Groupe des modérateurs

Samuel Hennuyer
Messages : 13
Enregistré le : 12 Juil 2006, 14:52

Formatage de graphiques

Messagepar Samuel Hennuyer » 19 Juil 2006, 12:52

Bonjour,

Encore une question qui pour moi reste sans réponse, même après avoir parcouru la doc dynamique de R.
Je voudrais pouvoir afficher deux boxplot sur le même graphique, avec l'affichage des étiquettes correspondant aux deux classes d'individus, là je sais faire facilement mais l'axe des ordonnées n'est pas assez précis.
Il s'agit de la direction en degrés, donc il doit aller de 0 à 360 degrés, et je veux qu'il m'affiche les graduations assez précises (par exemple par pas de 10° serait très bien).
Je ne parviens pas à modifier l'axe par défaut, sinon je peux enlever les deux axes à la fois puis réécrire les axes.

Voici un exemle de code :
boxplot(v$V1,v$V2,names=c("Montoir","Donges"))
axis(2,seq(0,360,10))

Ceci est désastreux : ça écrit par dessus l'axe précédent.

Pierre Bady
Messages : 405
Enregistré le : 02 Mai 2006, 07:46

Messagepar Pierre Bady » 19 Juil 2006, 13:54

bonjour,

voici deux exemple qui devrait t'aider à résoudre ton problème (j'espère):

le premier exemple:

Code : Tout sélectionner

fac <- as.factor(c(rep("a",5),rep("b",5)))
ted <- rnorm(10)
# il ne faut pas oublier d'indiquer "axes=F" dans le boxplot
# voir "?boxplot" et "?plot.default"
boxplot(ted~fac,axes=F)
vec <- seq(-2,2,le=10)
axis(2,vec,labels=round(vec,2))
axis(1)


le second exemple:
celui-ci est un petit peu plus tordu, mais je le trouve relativement sympa:

Code : Tout sélectionner

fac <- as.factor(c(rep("a",5),rep("b",5)))
ted <- rnorm(10)
boxplot(ted~fac,axes=F)
vec <- seq(-2,2,le=10)
vec1 <-round(vec,1)
vec2 <- sapply(1:10,function(x) ifelse(((x)%%2) ==0,"",vec1[x]))
axis(2,vec,labels=vec2)
axis(1)



en espérant t'avoir aidé un peu :)

@+++

pierre
=@===--------¬-------¬------¬-----¬
liens utiles :
http://www.gnurou.org/Writing/SmartQuestionsFr
http://neogrifter.free.fr/welcomeOnInternet.jpg
]<((((*< -------------------------------

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 19 Juil 2006, 13:57

Voici deux exemples, l'un avec la fct bwplot du package lattice, l'autre avec boxplot:

Code : Tout sélectionner

# données bidon
Data <- data.frame(Direction = c(pmax(0, pmin(360, rnorm(200, 75, 10))),
                                 pmax(0, pmin(360, rnorm(200, 45, 10)))),
                   Station = rep(c("Montoir", "Donges"), each = 200))
                   
# position des tick marks
pos <- seq(0, 360, 10)

library(lattice)

bwplot(Station ~ Direction, data = Data,
  scales = list(x = list(at = pos)))


boxplot(Direction ~ Station, data = Data, axes = FALSE)
axis(1, at = 1:2, labels = levels(Data$Station))
axis(2, at = pos, labels = format(pos), las = 1)
box()



Renaud

Samuel Hennuyer
Messages : 13
Enregistré le : 12 Juil 2006, 14:52

Messagepar Samuel Hennuyer » 19 Juil 2006, 13:59

Tout ça c'est bien, mais il me faut une étiquette en bas pour chaque boxplot, et pas un axe gradué...

Merci Renaud ça me va ; je voudrais être sûr de ce à quoi correspond le paramètre `las' dans `axis' ??

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 19 Juil 2006, 14:19

Voir ?par. L'argument las = 1 assure que l'étiquette est positionnée horizontalement.

Renaud

Samuel Hennuyer
Messages : 13
Enregistré le : 12 Juil 2006, 14:52

Messagepar Samuel Hennuyer » 19 Juil 2006, 14:29

Entendu.
En rendant les boxplots moins larges (boxwex=0.5) l'espace entre les deux devient trop grand ; je ne vois pas comment faire pour le réduire.
de plus est-il possible d'ajouter le même axe que j'aurai mis à gauche, à droite pour plus de lisibilité ? merci d'avance.

Samuel.

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 19 Juil 2006, 14:38

1. Voir l'argument at de boxplot.
2. Oui:

Code : Tout sélectionner

axis(4, at = pos, labels = format(pos), las = 1)
Renaud

Samuel Hennuyer
Messages : 13
Enregistré le : 12 Juil 2006, 14:52

Messagepar Samuel Hennuyer » 19 Juil 2006, 14:53

Merci pour le second axe mais il n'apparaît qu'en partie à droite du champ graphique, n'y a-t'il pas moyen de fixer la largeur de la fenêtre graphique afin de faire apparaître comme il faut ces étiquettes de direction ?
Sinon pour positionner les boxplots, `at' n'est pas satisfaisant puisque par exemple "at=c(1.1,1.9)" rapproche les deux mais laisse plus d'espace autour d'eux à gauche et droite resp. A mon avis il faudrait pouvoir diminuer la largeur de la "box"...

Ah oui et comment puis-je enlever les queues de poisson ? Je pensais que c'était fait avec `notch' mais pas du tout, c'est pour mieux voir la médiane (très utile par ailleurs). Je voudrais à la limite juste les boîtes, pour plus de précision, et dans un second temps pouvoir mettre en queues de poisson les déciles 10% et 90% au lieu du min et du max par défaut.

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 19 Juil 2006, 15:41

Merci pour le second axe mais il n'apparaît qu'en partie à droite du champ graphique, n'y a-t'il pas moyen de fixer la largeur de la fenêtre graphique afin de faire apparaître comme il faut ces étiquettes de direction ?


Si bien sûr. Il y a même de multiples manières d'y parvenir. La plus simple est de régler la largeur des mages avec le paramètres graphique mar. Voir ?par. Il va falloir que tu investisses un peu de temps pour étudier les différents paramètres graphiques. Il faut aussi lire de la doc spécifique sur les graphiques. Voir sur le CRAN: il y a bcp de docs en accès libre.

Pour les autres questions, il va falloir se plonger dans la doc de boxplot (ou de lattice qui permet aussi des réglages très fins). Désolé, pas le temps d'aller plus loin sur ce sujet maintenant.

Renaud


Retourner vers « Archives : Fonctions graphiques »

Qui est en ligne

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

cron