Je trace une variable catégorielle et au lieu d'afficher les nombres pour chaque valeur de catégorie.
Je cherche un moyen d' ggplot
afficher le pourcentage de valeurs dans cette catégorie. Bien sûr, il est possible de créer une autre variable avec le pourcentage calculé et de tracer celle-là, mais je dois le faire plusieurs dizaines de fois et j'espère y parvenir en une seule commande.
J'expérimentais quelque chose comme
qplot(mydataf) +
stat_bin(aes(n = nrow(mydataf), y = ..count../n)) +
scale_y_continuous(formatter = "percent")
mais je dois l'utiliser de manière incorrecte, car j'ai des erreurs.
Pour reproduire facilement la configuration, voici un exemple simplifié:
mydata <- c ("aa", "bb", NULL, "bb", "cc", "aa", "aa", "aa", "ee", NULL, "cc");
mydataf <- factor(mydata);
qplot (mydataf); #this shows the count, I'm looking to see % displayed.
Dans le cas réel, j'utiliserai probablement à la ggplot
place de qplot
, mais la bonne façon d'utiliser stat_bin m'échappe toujours.
J'ai également essayé ces quatre approches:
ggplot(mydataf, aes(y = (..count..)/sum(..count..))) +
scale_y_continuous(formatter = 'percent');
ggplot(mydataf, aes(y = (..count..)/sum(..count..))) +
scale_y_continuous(formatter = 'percent') + geom_bar();
ggplot(mydataf, aes(x = levels(mydataf), y = (..count..)/sum(..count..))) +
scale_y_continuous(formatter = 'percent');
ggplot(mydataf, aes(x = levels(mydataf), y = (..count..)/sum(..count..))) +
scale_y_continuous(formatter = 'percent') + geom_bar();
mais tous les 4 donnent:
Error: ggplot2 doesn't know how to deal with data of class factor
La même erreur apparaît pour le cas simple de
ggplot (data=mydataf, aes(levels(mydataf))) +
geom_bar()
il s'agit donc clairement de la façon dont ggplot
interagit avec un seul vecteur. Je me gratte la tête, googler cette erreur donne un seul résultat .
Réponses:
Depuis que cela a été répondu, certains changements significatifs ont été apportés à la
ggplot
syntaxe. Résumant la discussion dans les commentaires ci-dessus:Voici un exemple reproductible utilisant
mtcars
:Cette question est actuellement le hit n ° 1 sur Google pour `` le nombre de ggplot vs l'histogramme en pourcentage '', donc j'espère que cela aidera à distiller toutes les informations actuellement contenues dans les commentaires sur la réponse acceptée.
Remarque: si
hp
n'est pas défini comme facteur, ggplot renvoie:la source
percent
un préfixe au package d'origine pour que ce qui précède fonctionne (c'est ce que j'ai fait).ggplot(mtcars, aes(x = factor(hp))) + geom_bar(aes(y = (..count..)/sum(..count..))) + scale_y_continuous(labels = scales::percent)
geom_bar(aes(y = (..count..)/tapply(..count..,..PANEL..,sum)[..PANEL..]))
plutôt. Chaque facette doit totaliser 100%.ce code modifié devrait fonctionner
si vos données ont des NA et que vous ne voulez pas qu'elles soient incluses dans le tracé, passez na.omit (mydataf) comme argument à ggplot.
J'espère que cela t'aides.
la source
formatter
argument ne fonctionnera plus. Au lieu de cela, vous voudrez quelque chose commelabels = percent_format())
.scales
bibliothèque avant de l'utiliserpercent_format()
, sinon cela ne fonctionnera pas. La 0.9.0 ne charge plus automatiquement les packages de support.? stat_bin
. Il montre par quelles colonnes supplémentaires sont ajoutées le bloc de donnéesggplot2
. Toutes les colonnes supplémentaires sont de la forme..variable..
.aes(y = (..count..)/sum(..count..))
par simplementaes(y = ..density..)
? Visuellement, cela donne une image très similaire (mais toujours différente)scales
bibliothèque, puis l'utiliserscale_y_continuous(labels=percent)
comme mentionné dans la documentationAvec ggplot2 version 2.1.0 c'est
la source
En mars 2017, avec
ggplot2
2.2.1, je pense que la meilleure solution est expliquée dans le livre de Hadley Wickham sur la science des données:stat_count
calcule deux variables:count
est utilisé par défaut, mais vous pouvez choisir d'utiliserprop
ce qui montre les proportions.la source
fill
mappage (aucune erreur n'est générée, mais aucune couleur de remplissage n'est ajoutée).group = 1
pour obtenir le mappage de remplissage. peut-être que ça aidegroup
paramètre, cependant, il n'affiche pas les pourcentages appropriés, car tout appartient à son propre groupe pour chaque valeur x unique.Si vous voulez des pourcentages sur l'axe des y et étiquetés sur les barres:
Lors de l'ajout des étiquettes de barre, vous souhaiterez peut-être omettre l'axe des y pour un graphique plus propre, en ajoutant à la fin:
la source
Si vous voulez des étiquettes de pourcentage mais des N réels sur l'axe des y, essayez ceci:
la source
Voici une solution de contournement pour les données à facettes. (La réponse acceptée par @Andrew ne fonctionne pas dans ce cas.) L'idée est de calculer la valeur en pourcentage en utilisant dplyr, puis d'utiliser geom_col pour créer le tracé.
Voici l'intrigue:
la source
Notez que si votre variable est continue, vous devrez utiliser geom_histogram (), car la fonction regroupera la variable par "bins".
la source