2013-07-27 25 views
5

weiß jemand, ob es möglich ist, Nullwerte aus einem Barplot in ggplot auszuschließen?Nullwerte aus einem ggplot Barplot ausschließen?

Ich habe eine Datenmenge, die Proportionen enthält wie folgt:

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 

, wie Sie eine Menge von Nullwerten in der ‚Stütze‘ Spalte gibt es zu sehen. Ich produziere ein facettiertes Balkendiagramm mit der Spalte 'X5employef' als Facette. Aber wegen der Nullwerte habe ich auf meinem Grundstück viel Platz (siehe unten). Gibt es eine Möglichkeit, ggplot zu zwingen, die Nullwerte nicht zu plotten? Es ist nicht der Fall, nicht verwendete Faktoren fallenzulassen, da dies keine NA-Werte sind, sondern 0. Irgendwelche Ideen??!

example plot

Antwort

1

Ich bin nicht sicher, ob es einen Weg gibt, ignoriert Werte in ggplot einzustellen. Allerdings könnte man bedenkt, einfach 0en zu NA Umkodierung:

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

Für Ihr Grundstück, einfach which verwenden, um festzulegen, dass Sie nur die Teilmenge des Datenrahmen, die nicht-Null-Anteile verwendet werden sollen. Auf diese Weise müssen Sie Ihren ursprünglichen Datenrahmen nicht ändern. Dann geben Sie "free_x" in Ihrem scales Argument innerhalb facet_grid an, um Ihren leeren Platz in Ihrem facettierten Diagramm loszuwerden.

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

Bitte beachte, dass ich die leeren Felder mit „leeren“ im Interesse des schnellen Imports in R aus Excel ersetzt.

+0

Auch [die Antwort auf diese ähnliche Frage] (http://stackoverflow.com/questions/17888456/why-this-facet-grid-doesnt-delete-columns) zeigt eine etwas andere Möglichkeit, dies zu tun, indem Hinzufügen von 'drop = TRUE' innerhalb des' aes' Arguments in 'ggplot()' –

+1

danke sc_evans, das wollte ich. versuche immer noch, meinen Kopf um die R-Syntax zu bekommen! Weißt du, ob ggplot die Proportionen für mich zuerst berechnen wird? Früher musste ich ddply verwenden, um meine Daten zusammenzufassen, bevor ich sie geplottet habe?!? –

+0

Ich müsste sehen, wie Ihr ursprünglicher Datenrahmen aussieht, aber was ich normalerweise mache, ist die Proportion innerhalb von 'aes()' zu berechnen. Also etwas wie 'ggplot (Daten, aes (x, y = [Wert/Summe (Werte)])). Wie auch immer, fragen Sie [hier] (http://stackoverflow.com/questions/18057081/ddply-summarise-proportional-count)? –