2011-01-10 17 views
10

mir die folgenden Datenstruktur, um zu versuchen und ein gestapeltes Flächendiagramm zu machen:ein gestapelte Fläche Grundstück macht mit ggplot2

df <- data.frame(PopDen = c(0.002279892, 0.002885407, 0.004291351, 0.002457731, 0.006631572, 0.007578882, 0.004465446, 0.007436628, 0.009001456, 0.006951703, 0.003602076, 0.005695585, 0.005819783, 0.007412274, 0.004931548, 0.006257411, 0.008635908, 0.005438558, 0.002251421,0.006438558), DomArea = c(253500, 135270, 197180, 131590, 142210, 166920, 125640, 184600, 139940, 126280, 127760, 190940, 133440, 143510, 117260, 69340, 143620, 127480, 181970,164180), PR_Cat = c("High", "High", "Low", "Low", "Low", "Low", "Low", "Low", "High", "High", "Medium", "Medium", "Medium", "Low", "Low", "Medium", "Medium", "Low", "Low","Low")) 

p <- ggplot(df, aes(PopDen, order(DomArea), colour = PR_Cat)) 
p + geom_area(aes(colour = PR_Cat, fill= PR_Cat), position = 'stack') 

Aber ich verstehe nicht, wie die Bereiche auf die jeweils stapeln andere; im Moment überschneiden sie sich. Ich nehme an, dass ich hier ein Argument position = 'stack' brauche, aber die Handlung sieht gleich aus, ob es enthalten ist oder nicht.

Ist es auch möglich, DomArea nach einer der Kategorien in PR_Cat zu bestellen oder müsste ich meine Daten reorganisieren?

Antwort

21

Ich bin nicht sicher, was Sie hier Plotten, aber Sie wollen nicht PopDen entlang der y Achse eher zu Plotten als die x Achse? Sie können die DomArea von jeder PR_Cat Kategorie bestellen ddply vom plyr Paket mit, und dann arbeitet die Stapel wie folgt: EDIT Ich erkannte Sie wahrscheinlich die Handlung wollen in der Reihenfolge Low, Medium High gestapelt werden, so müssen wir zwingen erste Bestellung auf dem PR_Cat Faktor, indem Sie:

df$PR_Cat <- ordered(df$PR_Cat, levels = c('Low', 'Medium', 'High')) 

und erstellen nun die DomAreaByCat Spalte ddply:

df <- ddply(df, .(PR_Cat), transform, DomAreaByCat = order(DomArea)) 

Ihre df wird wie folgt aussehen:

> df 
     PopDen DomArea PR_Cat DomAreaByCat 
1 0.004291351 197180 Low   8 
2 0.002457731 131590 Low   5 
3 0.006631572 142210 Low   9 
4 0.007578882 166920 Low   2 
5 0.004465446 125640 Low   3 
6 0.007436628 184600 Low   7 
7 0.007412274 143510 Low   11 
8 0.004931548 117260 Low   4 
9 0.005438558 127480 Low   10 
10 0.002251421 181970 Low   6 
11 0.006438558 164180 Low   1 
12 0.003602076 127760 Medium   4 
13 0.005695585 190940 Medium   1 
14 0.005819783 133440 Medium   3 
15 0.006257411 69340 Medium   5 
16 0.008635908 143620 Medium   2 
17 0.002279892 253500 High   4 
18 0.002885407 135270 High   2 
19 0.009001456 139940 High   3 
20 0.006951703 126280 High   1 

Und dann kann man die gestapelte Fläche Grundstück wie folgt tun:

p <- ggplot(df, aes(DomAreaByCat, PopDen)) 

p + geom_area(aes(colour = PR_Cat, fill= PR_Cat), position = 'stack') 

alt text

+0

Sie für die klare Erklärung danken. Ich bin immer noch unsicher über zwei Dinge; Warum würde DomAreaByCat geplottet werden? (Ich habe das versucht, aber es sieht meinem ursprünglichen Versuch ähnlich). Ist es nicht möglich, DomArea zu plotten? Das zweite Problem, das ich habe, ist, dass mein vollständiger Datensatz auf 1 normiert ist (Summe der 3 Kategorien); aber wenn es geplottet wird, spiked es über 1 (http://imgur.com/1C5Cp) Ich kann mir nicht vorstellen, dass das Sortieren die Werte verändert, aber ich sehe nicht, wie es sonst passiert. – djq

+0

@celenius - es stellt sich heraus, dass meine Werte der x-Achse nicht eindeutig waren, was zu einem Teil der Stapelung führte. Wenn ich völlig einzigartige Werte verwendet habe, hat es gut funktioniert. – djq

+0

@celenius - Sie meinen, der obige Ansatz funktioniert jetzt gut? –

Verwandte Themen