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 :

Etiquettes dans un histogramme


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2003
    Messages
    554
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 554
    Par défaut Etiquettes dans un histogramme
    Bonjour,
    Voici un petit programme tout simple qui dessine un histogramme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    X <- c(2,3,2,4,6,2,3,4,4,4,6,7,7,8)
    hist(X, breaks=0:10,xlim=c(0,10),col='cyan', labels=as.character(table(X)), cex.lab=0.7)
    Mon souci concerne les étiquettes.
    D'une part elles sont décalées, d'autre part leur taille ne semble pas modulable, malgré l'option cex.lab=0.7.

    Le décalage se produit parce que R recycle les résultats de la fonction table().
    Il est possible de créer un vecteur d'étiquettes qui prenne toutes les valeurs possibles. Par exemple avec ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Y <- data.frame(table(X))
    XLab <- merge(data.frame(X=1:10),Y,by='X',all.x=TRUE)
    XLab$Freq[is.na(XLab$Freq)] <- 0
    hist(X, breaks=0:10,xlim=c(0,10),col='cyan', labels=as.character(XLab$Freq), cex.lab=0.7)
    Mais je trouve ça très lourd et je me dis qu'il doit y avoir des manières plus courtes et élégantes de procéder. Est-ce que quelqu'un aurait une idée ?

    Quant à la taille des étiquettes, là je ne sais pas quel est le paramètre qui permet de modifier la taille des caractères !

    Est-ce que quelqu'un saurait régler ces questions ?
    Je souhaite ajouter des étiquettes dans un histogramme

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

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Par défaut
    Bonjour.
    Au cas où une solution avec {ggplot2} te conviendrait...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    library(ggplot2)
     
    X <- c(2,3,2,4,6,2,3,4,4,4,6,7,7,8)
    ggplot(data.frame(X=X)) +
      aes(x=X) +
      geom_histogram(binwidth = 1, fill="cyan", colour="black") +
      geom_text(aes(label=..count..), stat="count", vjust = -0.5) +
      scale_x_continuous(breaks=0:10, limits=c(0,10))

  3. #3
    Membre expérimenté Avatar de Alpacky
    Homme Profil pro
    .
    Inscrit en
    Mars 2014
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Mars 2014
    Messages : 99
    Par défaut
    bonjour,

    je sais pas si cette solution est top mais tu peux essayer ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    par(xpd=TRUE)
    h = hist(X, breaks = 0:10, plot=FALSE)
    plot(h, xlim = c(0,10), labels = as.character(h$counts), col="cyan")
    sinon tu peux utiliser ça https://stackoverflow.com/questions/...stogram-labels qui s'appuie sur la fonction tex et qui te permet de changer la taille, ac le par(xpd=TRUE) tu peux avoir ta valeur sur la colonne qui "sort des limites" car tu permets l'écriture dans la marge

    bon courage

  4. #4
    Membre éclairé
    Inscrit en
    Novembre 2003
    Messages
    554
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 554
    Par défaut
    Merci Alpacky
    Je crois que je vais rester sur cette solution qui me semble plus simple conceptuellement, en la modifiant légèrement selon le modèle du lien que tu as transmis https://stackoverflow.com/questions/...stogram-labels
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    par(xpd=TRUE)
    h = hist(X, breaks = 0:10)
    text(x = h$mids, y = h$counts, labels = h$counts, pos = 3)
    Un second appel à une fonction plot() n'est plus nécessaire

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2003
    Messages
    554
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 554
    Par défaut
    Citation Envoyé par olivier.decourt Voir le message
    ... Au cas où une solution avec {ggplot2} te conviendrait...
    Merci Olivier,
    Je ne me suis pas encore attaqué sérieusement à ggplot qui me semble bien compliqué, malgré les tutos.
    C'est peut-être l'occasion ... je ne sais pas encore

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

Discussions similaires

  1. Afficher pourcentage dans un histogramme
    Par Pietro_L dans le forum Excel
    Réponses: 6
    Dernier message: 14/04/2017, 13h09
  2. Etiquettes dans graphiques
    Par elise1983 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/02/2008, 17h00
  3. [bar] Faire varier la couleur dans un histogramme
    Par totooo dans le forum MATLAB
    Réponses: 7
    Dernier message: 23/12/2007, 13h14
  4. saut de ligne dans etiquette dans etat access
    Par gui-llaume dans le forum IHM
    Réponses: 5
    Dernier message: 24/10/2007, 12h39
  5. [Jfreechart] Afficher intitulé barre dans un histogramme
    Par keumlebarbare dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 28/11/2006, 15h57

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