2013-07-27 20 views
5

qualcuno sa se è possibile escludere valori zero da un barplot in ggplot?Escludere valori zero da un bargetto ggplot?

Ho un insieme di dati che contiene le proporzioni come segue:

X5employf  prop X5employff 
1 increase 0.02272727   
2 increase 0.59090909   1 
3 increase 0.02272727 1 and 8 
4 increase 0.02272727   2 
5 increase 0.34090909   3 
6 increase 0.00000000   4 
7 increase 0.00000000   5 
8 increase 0.00000000   6 
9 increase 0.00000000 6 and 7 
10 increase 0.00000000 6 and 7 
11 increase 0.00000000   7 
12 increase 0.00000000   8 
13 decrease 0.00000000   
14 decrease 0.00000000   1 
15 decrease 0.00000000 1 and 8 
16 decrease 0.00000000   2 
17 decrease 0.00000000   3 
18 decrease 0.10000000   4 
19 decrease 0.50000000   5 
20 decrease 0.20000000   6 
21 decrease 0.00000000 6 and 7 
22 decrease 0.00000000 6 and 7 
23 decrease 0.10000000   7 
24 decrease 0.10000000   8 
25  same 0.00000000   
26  same 0.00000000   1 
27  same 0.00000000 1 and 8 
28  same 0.00000000   2 
29  same 0.00000000   3 
30  same 0.21052632   4 
31  same 0.31578947   5 
32  same 0.26315789   6 
33  same 0.15789474 6 and 7 
34  same 0.00000000 6 and 7 
35  same 0.05263158   7 
36  same 0.00000000   8 

come si può vedere nella colonna 'prop' ci sono un sacco di valori zero. Sto producendo un grafico a barre sfaccettate con la colonna 'X5employf' come faccetta. Ma a causa dei valori zero, ho finito con un sacco di spazio vuoto sulla mia trama (vedi sotto). C'è un modo per forzare ggplot a non tracciare i valori zero? Non è il caso di far cadere i fattori inutilizzati in quanto questi non sono valori NA ma 0s. Qualche idea??!

example plot

risposta

1

sono incerto se o non c'è un modo per impostare i valori ignorati in ggplot. Tuttavia si potrebbe considerare semplicemente ricodifica 0 di per NA:

df[df$prop == 0] <- NA 
4

Per la vostra trama, è sufficiente utilizzare which per specificare che si desidera utilizzare solo il sottoinsieme del dataframe contenente diversi da zero proporzioni. In questo modo non devi modificare il tuo dataframe originale. Quindi, specifica "free_x" nell'argomento scales all'interno di facet_grid per liberarti del tuo spazio vuoto nella trama sfaccettata.

plot <- ggplot(df[which(df$prop>0),], aes(X5employff, prop)) + 
    geom_bar(aes(fill=X5employff, stat="identity")) + 
    facet_grid(~ X5employf, scales="free_x") + 
    theme_bw() 
plot 

enter image description here

Si noti che ho sostituito i campi vuoti con "vuoto" per il bene di importazione rapida in R da Excel.

+0

Inoltre, [la risposta a questa domanda simile] (http://stackoverflow.com/questions/17888456/why-this-facet-grid-doesnt-delete-columns) mostra un modo leggermente diverso di fare ciò, aggiungendo 'drop = TRUE' all'interno dell'argomento' aes' all'interno di 'ggplot()' –

+1

grazie sc_evans, questo è quello che volevo. sto ancora cercando di capire la sintassi di R! Sai se ggplot calcolerà prima le proporzioni per me? Precedentemente ho dovuto usare ddply per riassumere i miei dati prima che lo tracciassi?!? –

+0

Dovrei vedere come è il tuo dataframe originale, ma quello che faccio di solito è calcolare la proporzione all'interno di 'aes()'. Quindi, qualcosa come 'ggplot (data, aes (x, y = [valore/somma (valori)]))'. Ad ogni modo, è questo che stai chiedendo [qui] (http://stackoverflow.com/questions/18057081/ddply-summarise-proportional-count)? –

Problemi correlati