Mostrar porcentaje % en lugar de recuentos en gráficos de variables categóricas
Estoy trazando una variable categórica y en lugar de mostrar los recuentos de cada valor de categoría.
Estoy buscando una manera de ggplot
mostrar el porcentaje de valores en esa categoría. Por supuesto, es posible crear otra variable con el porcentaje calculado y trazarla, pero tengo que hacerlo varias docenas de veces y espero lograrlo con un solo comando.
Estaba experimentando con algo como
qplot(mydataf) +
stat_bin(aes(n = nrow(mydataf), y = ..count../n)) +
scale_y_continuous(formatter = "percent")
pero debo estar usándolo incorrectamente, ya que obtuve errores.
Para reproducir fácilmente la configuración, aquí hay un ejemplo simplificado:
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.
En el caso real, probablemente usaré ggplot
en lugar de qplot
, pero aún se me escapa la forma correcta de usar stat_bin .
También probé estos cuatro enfoques:
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();
pero los 4 dan:
Error: ggplot2 doesn't know how to deal with data of class factor
El mismo error aparece para el caso simple de
ggplot (data=mydataf, aes(levels(mydataf))) +
geom_bar()
entonces es claramente algo sobre cómo ggplot
interactúa con un solo vector. Me estoy rascando la cabeza, buscar ese error en Google da un resultado único .
Desde que se respondió esto, ha habido algunos cambios significativos en la ggplot
sintaxis. Resumiendo la discusión en los comentarios anteriores:
require(ggplot2)
require(scales)
p <- ggplot(mydataf, aes(x = foo)) +
geom_bar(aes(y = (..count..)/sum(..count..))) +
## version 3.0.0
scale_y_continuous(labels=percent)
Aquí hay un ejemplo reproducible usando mtcars
:
ggplot(mtcars, aes(x = factor(hp))) +
geom_bar(aes(y = (..count..)/sum(..count..))) +
scale_y_continuous(labels = percent) ## version 3.0.0
Esta pregunta es actualmente la respuesta número uno en Google para 'recuento de ggplot versus histograma porcentual', por lo que esperamos que esto ayude a resumir toda la información que se encuentra actualmente en los comentarios sobre la respuesta aceptada.
Observación: Si hp
no se establece como factor, ggplot devuelve:
este código modificado debería funcionar
p = ggplot(mydataf, aes(x = foo)) +
geom_bar(aes(y = (..count..)/sum(..count..))) +
scale_y_continuous(formatter = 'percent')
Si sus datos tienen NA y no desea que se incluyan en el gráfico, pase na.omit(mydataf) como argumento para ggplot.
espero que esto ayude.