2013-07-27 14 views
5

czy ktoś wie, czy można wykluczyć wartości zerowe z barplota w ggplot?Wyklucz wartości zerowe z wykresu ggplot?

Mam zestaw danych, który zawiera proporcje następująco:

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 

jak widać w kolumnie „prop” istnieje wiele wartości zerowych. Produkuję fasetowany wykres słupkowy z kolumną "X5employf" jako aspekt. Ale z powodu wartości zerowych kończę z dużą ilością pustej przestrzeni na moim wykresie (patrz poniżej). Czy istnieje sposób na to, by ggplot nie rysował wartości zerowych? Nie jest tak w przypadku upuszczania niewykorzystanych czynników, ponieważ nie są to wartości NA, ale 0s. Jakieś pomysły??!

example plot

Odpowiedz

1

jestem pewien, czy istnieje sposób, aby ustawić ignorowane wartości ggplot. Jednak można rozważyć po prostu recoding 0 do NA:

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

Na swojej działce, wystarczy użyć which aby określić, że chcesz używać tylko podzbiór dataframe zawierającej niezerowe proporcje. W ten sposób nie trzeba modyfikować oryginalnej ramki danych. Następnie określ "free_x" w swoim argumencie scales w ciągu facet_grid, aby pozbyć się pustego miejsca na działce z fasetami.

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

pamiętać, że zastąpił puste pola z "blank" ze względu na szybki import do R z programu Excel.

+0

Również [odpowiedź na to podobne pytanie] (http://stackoverflow.com/questions/17888456/why-this-facet-grid-doesnt-delete-columns) pokazuje nieco inny sposób, aby to zrobić, dodanie 'drop = TRUE' w argumencie' aes' wewnątrz 'ggplot()' –

+1

dzięki sc_evans, tego właśnie chciałem. wciąż próbuję zrozumieć moją składnię R! Czy wiesz, że ggplot najpierw obliczy proporcje? Wcześniej musiałem użyć ddply do podsumowania moich danych, zanim je wykreśliłem?!? –

+0

Chciałbym zobaczyć, jak wygląda twoja oryginalna ramka danych, ale zwykle robię to obliczając proporcje wewnątrz 'aes()'. Tak więc coś w rodzaju 'ggplot (dane, aes (x, y = [wartość/suma (wartości)])). W każdym razie, czy o to pytasz [tutaj] (http://stackoverflow.com/questions/18057081/ddply-summarise-proportional-count)? –