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 :

geom_bar() avec ggplot


Sujet :

R

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    avril 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2015
    Messages : 10
    Points : 10
    Points
    10
    Par défaut geom_bar() avec ggplot
    Salut à tous,

    J'aimerais simplement placer des barres d'erreur sur mon diagramme en barres qui affiche la longueur des sépales selon l'espèce (3 colonnes pour 3 espèces).
    Avant l'ajout des barres d'erreur il n'y a pas de souci.
    J'essaye ce code sans succès, j'obtiens le message d'erreur:

    "Erreur : Aesthetics must be either length 1 or the same as the data (150): ymin"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Variance <- var(iris$Sepal.Length, na.rm = T)
    Ecart <- sqrt(Variance)
     
    ggplot(iris, aes(x = Species, y = iris$Sepal.Length)) + geom_col() + geom_errorbar(aes(ymax = iris$Sepal.Length+Ecart, ymin = iris$Sepal.Lenght-Ecart), data=iris)
    J'ai retourné le problème dans tous les sens mais je ne comprends pas ...
    J'ai pris le jeu de données "iris" sur R.

    Auriez-vous une explication à me donner ... ?

  2. #2
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    avril 2008
    Messages
    2 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2008
    Messages : 2 010
    Points : 4 391
    Points
    4 391
    Par défaut
    Bonjour.
    Déjà, si le jeu de données est toujours le même, il suffit de l'indiquer dans ggplot() et pas nécessaire de le rappeler ensuite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ggplot(iris, 
           aes(x = Species, y = Sepal.Length)) + 
      geom_col() + 
      geom_errorbar(aes(ymax = Sepal.Length+Ecart, 
                        ymin = Sepal.Length-Ecart))
    Reste la question de ce que tu veux obtenir.

    Sepal.Length+Ecart est un vecteur de 150 valeurs (chaque valeur de Sepal.Length à laquelle on ajoute l'écart-type). Comment utiliser ces 150 valeurs comme extrémités de barres d'erreur ? En superposant 150 barres d'erreurs ?
    On pourrait ajouter une fonction statistique (mean(Sepal.Length)+Ecart par exemple) mais la moyenne ne serait pas calculée séparément pour chaque barre, mais au global sur toutes les espèces.

    Dans ce type de graphique, le plus simple est souvent de préparer les données en amont avec toutes les quantités déjà calculées : la hauteur des barres, les extrémités des barres d'erreur, et d'avoir autant de lignes que de bâtons dans le graphique. Avec cette organisation des données, le code s'écrit de manière beaucoup plus facile.
    Bon courage.
    Olivier

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    avril 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2015
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Tout d'abord merci de votre réponse. J'ai pu avancer sur mon code mais il n'est pas encore abouti.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Ecart_type <- rep(c(Sd_Setosa, Sd_Versicolor, Sd_Virginica), each=50)
    Ecart_type
     
    ## Ajout d'une colonne avec les écarts-type
     
    Tab_Complet <- mutate(iris, Ecart_type) %>%
      select(Ecart_type, Sepal.Length, Species) 
    Tab_Complet
     
    library(ggplot2)
    ggplot(Tab_Complet, aes(x = Species, y = Sepal.Length)) +
      labs (x="Espèce", y="Longueur", title="Liaison entre espèce et longueur de sépale") +
      geom_bar(stat="identity") 
      #geom_errorbar(aes(ymin=Sepal.Length-Ecart_type,ymax=Sepal.Length+Ecart_type))
    J'ai créé le vecteur "Ecart_Type" avec les 50 valeurs associées à chaque espèce.

    Cependant, je me rends compte que la simple réalisation du mon diagramme en barre pose problème.
    Les valeurs sur l'axe y ne correspondent pas aux données sur la longueur des sépales.

    Les 3 moyennes sont les suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    > mean(Tab_Versicolor$Sepal.Length,na.rm=T)
    [1] 5.936
    > mean(Tab_Setosa$Sepal.Length,na.rm=T)
    [1] 5.006
    > mean(Tab_Virginica$Sepal.Length,na.rm=T)
    [1] 6.588
    Nom : Graph_Longueur_Sepale.PNG
Affichages : 38
Taille : 16,8 Ko

    J'aurais grand besoin de votre aide ... !

  4. #4
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    avril 2008
    Messages
    2 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2008
    Messages : 2 010
    Points : 4 391
    Points
    4 391
    Par défaut
    Bonjour.
    Les hauteurs des barres correspondent à la somme des longueurs de sépales. Plutôt que stat="identity" il faudrait écrire stat="summary", fun=mean pour obtenir des barres proportionnelles aux moyennes. Ou mettre en entrée, comme je le proposais dans ma réponse précédente, une table déjà agrégée (3 lignes, une par espèce), avec 4 colonnes : espèce, moyenne, borne inf et borne sup de la barre d'erreur. Dans cette configuration stat="identity" sera approprié.
    Bon courage.
    Olivier

Discussions similaires

  1. Graphique barres avec ggplot (novice)
    Par preliator dans le forum R
    Réponses: 1
    Dernier message: 07/05/2020, 16h43
  2. Problème avec ggplot
    Par faubry dans le forum R
    Réponses: 1
    Dernier message: 24/12/2019, 19h00
  3. Comment déplacer axe des x avec ggplot
    Par jcpcm dans le forum R
    Réponses: 2
    Dernier message: 11/10/2019, 08h50
  4. Réponses: 3
    Dernier message: 25/11/2014, 16h27
  5. Réponses: 1
    Dernier message: 20/10/2010, 01h22

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