Ggplot étiquettes des ordonnées

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

Pauline Thiel
Messages : 40
Enregistré le : 06 Jan 2017, 08:29

Ggplot étiquettes des ordonnées

Messagepar Pauline Thiel » 23 Jan 2017, 13:06

Bonjour à tous,
Je demande votre aide aujourd'hui car j'ai tracé un ggplot en geom_bar avec le code suivant:

Code : Tout sélectionner

ggplot(dosage, aes(date, RR))
+ ylab("Précipitations (mm)")+xlab("")
+ geom_bar(stat="identity")
+ theme(axis.text.x = element_blank(),axis.title.y = element_text(size=12, face="bold"))
+ scale_x_date(date_breaks = "3 months", date_labels = "%m/%Y")

J'obtiens bien le diagramme en barres attendu, mais le problème se trouve au niveau de l'axe des ordonnées. Toutes les étiquettes sont en bas de l'axe, superposées. Ce qui est encore plus étrange, c'est que les barres sont de la bonne hauteur, c'est-à-dire que pour la valeur maximale de 18,5 mm par exemple, l'étiquette se trouve à même pas moitié de la hauteur de la barre correspondante.
Savez-vous d'où peut venir le problème?
Cordialement,
Pauline

Alexandre Dangléant
Messages : 270
Enregistré le : 30 Mar 2010, 14:38

Re: Ggplot étiquettes des ordonnées

Messagepar Alexandre Dangléant » 23 Jan 2017, 14:05

Bonjour,

Je ne vois aucune erreur dans votre code, pas plus que de tentative de modification de l'axe y.

Donc le problème doit venir des données, pouvez-vous en donner un extrait (via la fonction str par exemple, si le jeu de données est trop volumineux)?

Cordialement.

Pauline Thiel
Messages : 40
Enregistré le : 06 Jan 2017, 08:29

Re: Ggplot étiquettes des ordonnées

Messagepar Pauline Thiel » 23 Jan 2017, 14:23

Code : Tout sélectionner

> str(dosage)
'data.frame':   253 obs. of  13 variables:
 $ date        : Date, format: "2013-01-14" "2013-01-14" ...
 $ dispositif  : chr  "A7L" "A7L" "A7L" "A7B" ...
 $ code        : Factor w/ 1132 levels "MU1","MU10","MU100",..: 250 238 383 361 372 494 516 505 649 660 ...
 $ mgN.L       : num  3.57 8.8 2.39 13.75 7.45 ...
 $ NO3.4.4     : num  15.8 39 10.6 60.9 33 ...
 $ volume      : num  1.5 20 13 0.69 19 1.08 7 20 0.565 18.5 ...
 $ temps       : num  26 26 8 7 8 7 8 8 7 8 ...
 $ ETPP        : num  0.3 0.3 0.4 0.4 0.4 0.9 0.9 0.9 0.6 0.6 ...
$ RR          : Factor w/ 19 levels "0","0.5","1",..: 1 1 1 1 1 4 4 4 3 3 ...
 $ mg_recuperes: num  23.7 779.4 137.5 42 626.8 ...
 $ debit       : num  0.0577 0.7692 1.625 0.0986 2.375 ...
 $ surface     : num  7.5e-07 7.5e-07 7.5e-07 3.0e-07 7.5e-07 3.0e-07 7.5e-07 7.5e-07 3.0e-07 7.5e-07 ...
 $ flux_NO3    : num  1824 799385 298003 13805 1984898 ...

Pauline Thiel
Messages : 40
Enregistré le : 06 Jan 2017, 08:29

Re: Ggplot étiquettes des ordonnées

Messagepar Pauline Thiel » 24 Jan 2017, 09:20

Mes données de précipitations sont donc en factor. J'ai essayé de les passer en numeric, les valeurs sur l'axe des ordonnées ne se superposent plus mais ce ne sont pas les bonnes. Mes valeurs vont jusqu'à 19mm et les graduations indiquent plutôt qu'elles vont jusqu'à 90mm.

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

Re: Ggplot étiquettes des ordonnées

Messagepar Logez Maxime » 24 Jan 2017, 09:56

Bonjour,

pour passer d'un facteur à un nombre le plus sain est de d'abord passer le facteur en chaîne de caractères et ensuite en nombre : as.numeric(as.character(dosage$RR)).

Cordialement,
Maxime

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Ggplot étiquettes des ordonnées

Messagepar Mickael Canouil » 24 Jan 2017, 10:07

Bonjour,

personnellement, et même si l'utilisation des facteurs peut être pratique, elle est la source de nombreux problèmes, ainsi je recommande de désactiver l'option de conversion en facteurs par défaut.

Code : Tout sélectionner

options(stringsAsFactors = FALSE)


Ainsi, si vous souhaitez utiliser des facteurs, vous pourrez toujours effectuer la conversion par la suite avec "as.factor" ou "factor" (fonctionne même en interne dans ggplot).

Cela évitera de nombreuses "erreurs" et vous apportera un meilleur contrôle du type des données ("numeric"/"character").

Au passage, si votre variable "RR" est sensé être numérique et qu'elle se retrouve converti en facteur, c'est qu'il y a un caractère non-numérique dans celle-ci. La conversion proposée par Maxime, transformera cette valeur en NA, avec un warning.
Il serait bon de vérifier la valeur de RR où cela arrive (p.ex. une "," au lieu d'un "." pour une valeur).

Cordialement
Mickaël
mickael.canouil.fr | rlille.fr

Pauline Thiel
Messages : 40
Enregistré le : 06 Jan 2017, 08:29

Re: Ggplot étiquettes des ordonnées

Messagepar Pauline Thiel » 24 Jan 2017, 10:31

Je viens de comprendre le problème d'échelle quand les valeurs sont en numeric, il m'additionne les valeurs pour les différents dispositifs pour chaque jour. Tout devient plus clair !
Merci à vous deux,
Cordialement
Pauline

Pauline Thiel
Messages : 40
Enregistré le : 06 Jan 2017, 08:29

Re: Ggplot étiquettes des ordonnées

Messagepar Pauline Thiel » 24 Jan 2017, 10:57

Par tout hasard, sauriez-vous comment ne faire apparaitre qu'une seule valeur pour chaque date plutôt que ce qu'elles soient additionnées?
Cordialement,
Pauline

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

Re: Ggplot étiquettes des ordonnées

Messagepar Logez Maxime » 24 Jan 2017, 14:05

re,

tu as probablement plusieurs valeurs par date d'où la somme. Si tu ne veux faire apparaître qu'une seule valeur c'est possible mais à condition que tu nous dises quelle valeur faire apparaître. La première ? Moyenne ? Médiane ? Max ? Min ? etc.

Cordialement,
Maxime

Pauline Thiel
Messages : 40
Enregistré le : 06 Jan 2017, 08:29

Re: Ggplot étiquettes des ordonnées

Messagepar Pauline Thiel » 24 Jan 2017, 14:10

Elles sont toutes identiques puisqu'il s'agit des précipitations relevées pour chaque jour. Donc la première pour chaque date pourrait m'aller.
Cordialement,
Pauline

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

Re: Ggplot étiquettes des ordonnées

Messagepar Logez Maxime » 24 Jan 2017, 14:14

Code : Tout sélectionner

library(dplyr)
ggplot(dosage %>% group_by(date) %>% slice(1), aes(date, RR))
+ ylab("Précipitations (mm)")+xlab("")
+ geom_bar(stat="identity")
+ theme(axis.text.x = element_blank(),axis.title.y = element_text(size=12, face="bold"))
+ scale_x_date(date_breaks = "3 months", date_labels = "%m/%Y")

# ou
ggplot(dosage[!duplicated(tab$date),], aes(date, RR))
+ ylab("Précipitations (mm)")+xlab("")
+ geom_bar(stat="identity")
+ theme(axis.text.x = element_blank(),axis.title.y = element_text(size=12, face="bold"))
+ scale_x_date(date_breaks = "3 months", date_labels = "%m/%Y")

Pauline Thiel
Messages : 40
Enregistré le : 06 Jan 2017, 08:29

Re: Ggplot étiquettes des ordonnées

Messagepar Pauline Thiel » 24 Jan 2017, 15:00

C'est parfait, merci beaucoup ! :)
Pauline

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Ggplot étiquettes des ordonnées

Messagepar Mickael Canouil » 24 Jan 2017, 17:15

ou encore avec "unique" pour n'avoir que les couples date/RR unique du data.frame

Code : Tout sélectionner

unique(dosage[, c("date", "RR")])

Code : Tout sélectionner

ggplot(unique(dosage[, c("date", "RR")]), aes(date, RR))
  ylab("Précipitations (mm)")+xlab("")
  geom_bar(stat="identity")
  theme(axis.text.x = element_blank(),axis.title.y = element_text(size=12, face="bold"))
  scale_x_date(date_breaks = "3 months", date_labels = "%m/%Y")
Mickaël
mickael.canouil.fr | rlille.fr


Retourner vers « Questions en cours »

Qui est en ligne

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