2010-03-31 10 views
13

J'essaie d'afficher les fréquences dans barplot ... eh bien, je les veux quelque part dans le graphique: sous les barres, dans les bars, au-dessus des bars ou dans la zone de légende. Et je me souviens (je peux me tromper) que cela peut être fait en ggplot2. C'est probablement facile ... au moins, cela semble facile. Voici le code:Afficher les fréquences avec barplot dans ggplot2

p <- ggplot(mtcars) 
p + aes(factor(cyl)) + geom_bar() 

Y a-t-il des chances que je puisse obtenir des fréquences intégrées dans le graphique?

Répondre

18

geom_text est tha analogique text de graphiques de base:

p + geom_bar() + stat_bin(aes(label=..count..), vjust=0, 
          geom="text", position="identity") 

Si vous voulez régler la position y des étiquettes, vous pouvez utiliser l'esthétique y= au sein stat_bin: par exemple, y=..count..+1 mettra l'étiquette une unité au-dessus de la barre. Cela fonctionne également si vous utilisez geom_text et stat="bin" à l'intérieur.

+0

Pour l'étiquette, pourquoi y a-t-il un ".." précédant et suivant le comptage? –

+1

'..count..' est le nom de la variable contenant les fréquences de bin que' stat_bin' crée automatiquement. Donc les deux périodes avant et après font partie du nom de la variable – Aniko

+0

Cette réponse m'a donné une erreur 'Erreur: stat_count nécessite l'esthétique manquante suivante: x'. Cependant, ajouter le 'aes (facteur (cyl))' et changer 'stat_bin' en' stat_count' comme dans 'p + aes (facteur (cyl)) + geom_bar() + stat_count (aes (étiquette = .. compte. .), vjust = 0, geom = "texte", position = "identité") 'a travaillé. – steveb

0

Si vous n'êtes pas limité à ggplot2, vous pouvez utiliser? Texte à partir de graphiques de base ou? Boxed.labels du paquet plotrix.

4

Une façon difficile de le faire. Je suis sûr qu'il existe de meilleures approches.

ggplot(mtcars,aes(factor(cyl))) + 
geom_bar() + 
geom_text(aes(y=sapply(cyl,function(x) 1+table(cyl)[names(table(cyl))==x]), 
label=sapply(cyl,function(x) table(cyl)[names(table(cyl))==x]))) 
+11

Il est généralement de bonnes pratiques pour créer votre _outside_ de données de votre code de traçage. Et ce n'est jamais une bonne idée de mettre des données dans les mappings esthétiques. – hadley

0

Lorsque vous désirez ajouter des informations différentes Les travaux suivants:

ggplot(mydata, aes(x=clusterSize, y=occurence)) + 
geom_bar() + geom_text(aes(x=clusterSize, y=occurence, label = mydata$otherinfo)) 
+0

Pouvez-vous, s'il vous plaît, répliquer cette réponse en fournissant un exemple qui fait référence aux données disponibles dans le paquet 'datasets' (ou tout autre paquet disponible dans les repos CRAN)? Je doute que barplot puisse être dessiné avec la variable 'y' spécifiée" telle quelle "... – aL3xa

Questions connexes