Mostra% invece di conteggi nei grafici delle variabili categoriali


Answers

questo codice modificato dovrebbe funzionare

p = ggplot(mydataf, aes(x = foo)) + 
    geom_bar(aes(y = (..count..)/sum(..count..))) + 
    scale_y_continuous(formatter = 'percent')

se i tuoi dati hanno NA e non vuoi che siano inclusi nella trama, passa na.omit (mydataf) come argomento di ggplot.

spero che questo ti aiuti.

Question

Sto tracciando una variabile categoriale e invece di mostrare i conteggi per ogni valore di categoria.

Sto cercando un modo per ottenere ggplot per visualizzare la percentuale di valori in quella categoria. Certo, è possibile creare un'altra variabile con la percentuale calcolata e tracciare quella, ma devo farlo diverse decine di volte e spero di riuscirci in un unico comando.

Stavo sperimentando qualcosa di simile

qplot(mydataf) +
  stat_bin(aes(n = nrow(mydataf), y = ..count../n)) +
  scale_y_continuous(formatter = "percent")

ma devo usarlo in modo errato, poiché ho degli errori.

Per riprodurre facilmente la configurazione, ecco un esempio semplificato:

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.

Nel caso reale, probabilmente userò ggplot invece di qplot , ma il modo corretto di usare stat_bin mi sfugge ancora.

Ho anche provato questi quattro approcci:

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();

ma tutti e 4 danno:

Error: ggplot2 doesn't know how to deal with data of class factor

Lo stesso errore appare per il semplice caso di

ggplot (data=mydataf, aes(levels(mydataf))) +
  geom_bar()

quindi è chiaramente qualcosa su come ggplot interagisce con un singolo vettore. Mi sto grattando la testa, googling per quell'errore dà un unico result .




Se vuoi etichette in percentuale ma N effettivi sull'asse y, prova questo:

    library(scales)
perbar=function(xx){
      q=ggplot(data=data.frame(xx),aes(x=xx))+
      geom_bar(aes(y = (..count..)),fill="orange")
       q=q+    geom_text(aes(y = (..count..),label = scales::percent((..count..)/sum(..count..))), stat="bin",colour="darkgreen") 
      q
    }
    perbar(mtcars$disp)



A partire da marzo 2017, con ggplot2 2.2.1, penso che la soluzione migliore sia spiegata nel libro di scienza dei dati di Hadley Wickham:

ggplot(mydataf) + stat_count(mapping = aes(x=foo, y=..prop.., group=1))

stat_count calcola due variabili: il count viene utilizzato per impostazione predefinita, ma puoi scegliere di utilizzare l'oggetto che mostra le proporzioni.