Annotation sur un ggplot

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

Mathilde DEMONCHY
Messages : 20
Enregistré le : 26 Juin 2019, 07:15

Annotation sur un ggplot

Messagepar Mathilde DEMONCHY » 06 Avr 2020, 11:58

Bonjour,
J'ai créé un graphique en bar (ggplot), et je voudrais ajouter du texte dessus avec annotate.
Le texte que j'essaie de mettre ne s'affiche pas sur mon graphique.
J'ai cherché mais n'y arrive vraiment pas et je ne voie pas d'où vient le problème.
Voici mon script, avec un dataframe exemple (DFtest) :
C'est la dernière commande avec "annotate" qui devrait permettre d'ajouter le texte "essai" sur le graphique et qui ne fonctionne pas.

Code : Tout sélectionner

library(ggplot2) # pour création graphes ggplot
library(tidyverse) # pour les fonctions fct_reorder / stringr / ddply
library(plyr) # pour la fonction ddply

# Réalisation d’une dataframe test
Type_etablissement <- rep (  c("CLCC","CHU","CHU") , 6 )
Presence_manip_bloc <- rep ( c("OUI","NON") , 9 )   
DFtest <- data.frame (Type_etablissement, Presence_manip_bloc )

#calcul pourcentage d’observations pour chaque Type_etablissement:
annot_pourcent <- DFtest %>%   
  group_by(Type_etablissement) %>%
  dplyr::summarise(nb = n()) %>%
 ungroup() %>%
mutate(pourcentage =    paste0(round(nb/sum(nb)*100,1), " %") )

gg <- ggplot(DFtest)  + 
aes(x=reorder(Type_etablissement, Type_etablissement, function(x)- length(x))) +
geom_bar(stat="count", aes(fill= Presence_manip_bloc), colour="black", width=0.6) +
coord_flip(ylim=c(0,15))+
geom_text (annot_pourcent, mapping= aes(y=nb, label=pourcentage), hjust=-0.25, size=3)
#ajout du texte « essai »
gg+ annotate("text", x=2, y=10, label="essai", colour="red", size=7, fontface="bold")
gg


Merci pour vos avis !
Bonne journée,
Mathilde

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

Re: Annotation sur un ggplot

Messagepar Mickael Canouil » 06 Avr 2020, 15:22

Bonjour,

mis à part un curieux style d'écriture de code (pas d'espace entre une fonction et la parenthèse ouvrante par exemple).
Le problème vient de votre utilisation de coord_flip(), qui par définition va inverser vos axes, ainsi les coordonnées ne sont plus bonnes.

Je me suis permis un petit "refactoring" de votre code.

Code : Tout sélectionner

library(ggplot2)
packageVersion("ggplot2")
#> [1] '3.3.0'
library(scales)
packageVersion("scales")
#> [1] '1.1.0'
library(dplyr)
packageVersion("dplyr")
#> [1] '0.8.5'    

Code : Tout sélectionner

DFtest <- data.frame(
  Type_etablissement = rep(c("CLCC", "CHU", "CHU"), 6), 
  Presence_manip_bloc 
= rep(c("OUI", "NON"), 9)
)

Code : Tout sélectionner

gg <- ggplot(data = DFtest, mapping = aes(= stat(count), y = Type_etablissement)) +
  geom_bar(mapping = aes(fill = Presence_manip_bloc), colour = "black", width = 0.6) +
  geom_text(
    data = ~ mutate(count(.x, Type_etablissement), pourcentage = percent(/ sum(n))),
    mapping = aes(= n, label = pourcentage),
    hjust = -0.25,
    size = 3
  
) +
  scale_x_continuous(expand = expansion(c(0.05, 0.1))) 

Code : Tout sélectionner

gg + annotate(
  "text",
  x = 10,
  y = 2,
  label = "essai",
  colour = "red",
  size = 7,
  fontface = "bold"
)


Image

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

Mathilde DEMONCHY
Messages : 20
Enregistré le : 26 Juin 2019, 07:15

Re: Annotation sur un ggplot

Messagepar Mathilde DEMONCHY » 06 Avr 2020, 17:11

Bonjour et merci pour ta réponse Mickael,

Désolée pour mon écriture de code qui n'est peut être pas très académique...je fais de mon mieux :-)
Sinon, j'ai trouvé l'erreur de mon code !!!! vraiment basique…A force d'avoir la tête dedans je ne voyais pas l'erreur basique !

J'avais oublié de ré-affecté la ligne annotate à mon graphe gg :
Maintenant ça fonctionne...grrr :

Code : Tout sélectionner

gg <- ggplot(DFtest)  + 
aes(x=reorder(Type_etablissement, Type_etablissement, function(x)- length(x))) +
geom_bar(stat="count", aes(fill= Presence_manip_bloc), colour="black", width=0.6) +
coord_flip(ylim=c(0,15))+
geom_text (annot_pourcent, mapping= aes(y=nb, label=pourcentage), hjust=-0.25, size=3)
#ajout du texte « essai »
gg <- gg+ annotate("text", x=1, y=5, label="essai", colour="red", size=7, fontface="bold")
gg


Sinon, je me suis quand même plongée dans le code de Mickael, mais il ne fonctionne pas dans ma version de R.
J'ai d'abord une erreur quand je lance le code :

Code : Tout sélectionner

gg <- ggplot(data = DFtest, mapping = aes(x = stat(count), y = Type_etablissement)) +
  geom_bar(mapping = aes(fill = Presence_manip_bloc), colour = "black", width = 0.6) +
  geom_text(
    data = ~ mutate(count(.x, Type_etablissement), pourcentage = percent(n / sum(n))),
    mapping = aes(x = n, label = pourcentage),
    hjust = -0.25,
    size = 3
  ) +
  scale_x_continuous(expand = expansion(c(0.05, 0.1)))


=>

Code : Tout sélectionner

 Error in expansion(c(0.05, 0.1)) : could not find function "expansion"


J'ai donc décomposé et lancé la première partie de ton code :

Code : Tout sélectionner

gg <- ggplot(data = DFtest, mapping = aes(x = stat(count), y = Type_etablissement)) +
  geom_bar(mapping = aes(fill = Presence_manip_bloc), colour = "black", width = 0.6)
  gg
 


=>

Code : Tout sélectionner

Error: stat_count() must not be used with a y aesthetic.


D'autre part, comment fais-tu pour te passer de coord_flip ? c'est quoi dans ton code qui tourne le graphique ?

Merci de votre aide.
Mathilde

PS : Version de mes packages :

Code : Tout sélectionner

> packageVersion("ggplot2")
[1] '3.2.1'
> packageVersion("scales")
[1] '1.1.0'
> packageVersion("dplyr")
[1] '0.8.3'

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

Re: Annotation sur un ggplot

Messagepar Mickael Canouil » 07 Avr 2020, 08:15

Les erreurs que vous avez sont du à la divergence de version.
Pour me passer du coord_flip j'utilise la version 3.3.0 de ggplot2.

Cette dernière apporte pas mal d'améliorations bien pratiques.
https://www.tidyverse.org/blog/2020/03/ggplot2-3-3-0/
Mickaël
mickael.canouil.fr | rlille.fr

Mathilde DEMONCHY
Messages : 20
Enregistré le : 26 Juin 2019, 07:15

Re: Annotation sur un ggplot

Messagepar Mathilde DEMONCHY » 10 Avr 2020, 12:25

ok, merci beaucoup Mickael.
Je retiens les astuces.
Je ferai donc les changements de version (après la fin de mon projet actuel car j'ai peur que mes scripts me renvoi des erreurs du à un changement de version).
Mathilde

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

Re: Annotation sur un ggplot

Messagepar Mickael Canouil » 10 Avr 2020, 12:50

Bonjour,

vous pouvez mettre à jour ggplot2, mais en empêchant les mise à jour des autres packages.

Code : Tout sélectionner

install.packages("ggplot2"dependencies FALSE


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

Mathilde DEMONCHY
Messages : 20
Enregistré le : 26 Juin 2019, 07:15

Re: Annotation sur un ggplot

Messagepar Mathilde DEMONCHY » 10 Avr 2020, 12:59

merci :-)
bien vu


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 0 invité