2011-01-10 19 views
10

estoy usando la siguiente estructura de datos para tratar de hacer un gráfico de áreas apiladas:Hacer una parcela de áreas apiladas usando 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') 

Sin embargo, no entiendo cómo apilar las áreas en la parte superior de cada otro; en el momento en que se superponen. Supongo que necesito un argumento position = 'stack' aquí, pero la trama se ve igual si está incluida o no.

Además, ¿es posible ordenar DomArea por una de las categorías en PR_Cat o tendré que reorganizar mis datos?

Respuesta

21

No estoy seguro de lo que está trazando aquí, pero no desea que se le PopDen trazado a lo largo del eje y en lugar del eje x ? Puede solicitar el DomArea por cada PR_Cat categoría utilizando ddply del paquete plyr, y luego trabaja el apilamiento de la siguiente manera: EDITAR me di cuenta de que probablemente quiere que la parcela que se apilan en el orden Low, Medium High, por lo que necesita primera fuerza de este orden en el factor PR_Cat haciendo:

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

Y ahora crear la columna de la DomAreaByCat usando ddply:

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

Su df se verá así:

> 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 

y entonces usted puede hacer la trama de áreas apiladas como esto:

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

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

alt text

+0

gracias por la explicación clara. Sin embargo, aún no estoy seguro de dos cosas; ¿Por qué se trazaría DomAreaByCat? (Intenté esto pero parece similar a mi intento original). ¿No es posible trazar DomArea? El segundo problema que tengo es que mi conjunto de datos completo se normaliza en 1 (suma de las 3 categorías); sin embargo, cuando se traza, se dispara por encima de 1 (http://imgur.com/1C5Cp) No me puedo imaginar que la clasificación cambie los valores de estos, pero no veo cómo sucede. – djq

+0

@celenius - resultó que mis valores del eje x no eran únicos, lo que resultó en algo del apilamiento. Cuando utilicé valores completamente únicos, funcionó bien. – djq

+0

@celenius: ¿te refieres a que el enfoque anterior funciona bien ahora? –

Cuestiones relacionadas