Mostrar porcentaje % en lugar de recuentos en gráficos de variables categóricas

Resuelto wishihadabettername asked hace 54 años • 9 respuestas

Estoy trazando una variable categórica y en lugar de mostrar los recuentos de cada valor de categoría.

Estoy buscando una manera de ggplotmostrar 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é ggploten 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 ggplotinteractúa con un solo vector. Me estoy rascando la cabeza, buscar ese error en Google da un resultado único .

wishihadabettername avatar Jan 01 '70 08:01 wishihadabettername
Aceptado

Desde que se respondió esto, ha habido algunos cambios significativos en la ggplotsintaxis. 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

ingrese la descripción de la imagen aquí

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 hpno se establece como factor, ggplot devuelve:

ingrese la descripción de la imagen aquí

Andrew avatar Jan 24 '2013 22:01 Andrew

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.

Ramnath avatar Sep 12 '2010 16:09 Ramnath