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 :

ggplot2 et geom_bar : afficher les labels des catégories vides


Sujet :

R

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 3
    Points : 4
    Points
    4
    Par défaut ggplot2 et geom_bar : afficher les labels des catégories vides
    Bonjour,
    N'étant pas spécialiste (doctorant en didactique des langues), je vais essayer de d'énoncer clairement ma question. Toutes mes excuses si tout n’est pas clair...
    À l'aide de la formule suivante j'ai produit un graph en barres qui concerne des fréquences en % de la variable NoCrsP.p selon 5 catégories (jamais - rarement - de temps en temps - très souvent - presque tout le temps) et indiquée pour chaque individu 1, 2, 3, 4 ou 5 dans ma matrice No_p:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ggplot(data = No_p, aes(x = NoCrsP.p)) + labs(x="Leçon en breton\navec l'enseignant", y="Pourcentage d'écoles") + theme_gray(base_size = 25, base_family = "serif") + geom_bar(aes(y = 100*(..count..)/sum(..count..))) + ylim(0, 100) + scale_x_continuous(breaks=c( 1, 2, 3, 4, 5),labels=c( "jamais", "rarement","de tps\nen tps", "très\nsouvent", "presque\ntout le\ntemps"))
    Je suis très content de mon graph, sauf que les labels "jamais" et "rarement" qui ont pour fréquence "0" n'apparaissent pas sur l'axe horizontal, ce qui rend peu difficile la comparaison avec d'autres graphs du même type. Sauriez-vous comment faire apparaître sur un graph en barre les catégories de fréquence nulle avec ggplot?
    Nom : Rplot02.png
Affichages : 740
Taille : 10,4 Ko
    Merci beaucoup pour votre aide !

  2. #2
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut ggplot2 et geom_bar : afficher les labels des catégories vides
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iris_new <- iris[iris$Species %in% c("setosa","versicolor"),]
    • avec barplot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    barplot(table(iris_new$Species))
    Nom : plot1.png
Affichages : 712
Taille : 6,9 Ko

    • avec ggplot et geom_bar
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    iris_tab <- as.data.frame(table(iris_new$Species))
    library(ggplot2)
    ggplot(data=iris_tab, aes(x=Var1, y=Freq)) + geom_bar(stat="identity")
    Nom : plot2.png
Affichages : 692
Taille : 11,4 Ko

    Cordialement,

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup pour votre aide. Le problème persiste.
    Il vient sans doute de l’utilisation de la formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    y = 100*(..count..)/sum(..count..)
    pour calculer les fréquences en pourcentages.
    J’ai essayé d’insérer la formule directement dans «aes», ça ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ggplot(data = No_p, aes(x = NoCrsP.p, y = 100*(..count..)/sum(..count..))) + geom_bar(stat="identity")
    Error in FUN(X[[i]], ...) : objet 'count' introuvable

    J’ai essayé d’y écrire «Freq» comme dans votre exemple, en me disant qu’avec un peu de chance ce serait une formule magique qui calcul directement les pourcentages mais non:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ggplot(data = No_p, aes(x = NoCrsP.p, y = Freq)) + geom_bar(stat="identity") 
    Error in FUN(X[[i]], ...) : objet 'Freq' introuvable
    Voici les graphiques que j’obtiens avec ma technique initiale:
    Nom : 3.9 Plots - No x 6.png
Affichages : 738
Taille : 54,9 Ko

    Comme vous le voyez, l’absence des catégories dont la fréquence est nulle ne facilite pas la lecture et la comparaison. J'aimerais avoir les résultats pour les cinq catégories pour chaque graphique et pas trois catégories seulement comme dans l'exemple de mon premier message.


    Voici également mon tableau de données: (désolé pour la présentation, je n'ai pas compris comment fonctionne le générateur de tableaux)

    Ec NoCrP.p NoCrE.p NoCrCP.p NoClP.p NoClE.p NoCrsP.p NoCrsE.p NoDE
    Douarnenez 4 2 2 4 3 5 3 2
    Plozeved 4 1 1 4 2 4 2 1
    Saint Martin 2 1 1 3 1 4 2 1
    Cleder 1 1 1 2 1 3 1 1
    Scaer 4 1 1 5 3 5 4 1

    Ce sont des variables numériques, sauf la première bien sûr.

    Merci encore!

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour à tous,
    J'ai eu une réponse par ailleurs (merci à Mickael Canouil):
    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
    dta <- read.table(text = "Ec NoCrP.p NoCrE.p NoCrCP.p NoClP.p NoClE.p NoCrsP.p NoCrsE.p NoDE
    Douarnenez 4 2 2 4 3 5 3 2
    Plozeved 4 1 1 4 2 4 2 1
    'Saint Martin' 2 1 1 3 1 4 2 1
    Cleder 1 1 1 2 1 3 1 1
    Scaer 4 1 1 5 3 5 4 1", sep = " ", header = TRUE)
     
    library(ggplot2)
    ggplot(data = dta) +
      geom_bar(
        mapping = aes(
          x = factor(
            x = NoCrsP.p, 
            levels = 1:5, 
            labels =  c("jamais", "rarement", "de tps\nen tps", "très\nsouvent", "presque\ntout le\ntemps")
          ),
          y = after_stat(count / sum(count))
        )
      ) +
      scale_x_discrete(drop = FALSE) +
      scale_y_continuous(limits = c(0, 1), labels = function(x) paste(x * 100, "%")) +
      labs(x = "Leçon en breton\navec l'enseignant", y = "Pourcentage d'écoles") +
      theme_gray(base_size = 25, base_family = "serif")

  5. #5
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut ggplot2 et geom_bar : afficher les labels des catégories vides
    Bonjour,

    Merci pour le retour et l'instruction scale_x_discrete(drop = FALSE).

    Appliqué à mon exemple minimal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iris_new <- iris[iris$Species %in% c("setosa","versicolor"),]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ggplot(data = iris_new, aes(x = Species)) +
      geom_bar() +
      scale_x_discrete(drop = FALSE)
    ou en pourcentages :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ggplot(data = iris_new, aes(x = Species, y = after_stat(count / sum(count)))) +
      geom_bar() +
      scale_x_discrete(drop = FALSE)
    Cordialement,

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/05/2011, 14h24
  2. Réponses: 4
    Dernier message: 05/12/2007, 19h06
  3. Réponses: 23
    Dernier message: 23/05/2006, 16h52
  4. Afficher les détails des Indexes
    Par memos dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 12/05/2006, 19h19
  5. [WD10] Afficher les noms des colonnes
    Par devalender dans le forum WinDev
    Réponses: 4
    Dernier message: 24/02/2006, 14h38

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