2014-11-25 11 views
8

Sto utilizzando ggplot2 per tracciare i seguenti dati utilizzando geom_area. I valori sono progettati per essere un'immagine speculare dell'asse x. Ma la fine della trama per il cane non è speculare.ggplot2 geom_area traccia in modo imprevisto (finisce nel posto sbagliato)

enter image description here

Ma, come si può vedere da questo frame di dati cane dovrebbe terminare su x = 100 ey = 0 ma sembra finire su x = 100 ey = 100 (vedi ultima riga)

Come posso fare esattamente il gatto specchio del cane?

 x y animal 
1 100.0 100 cat 
2 90.0 89 cat 
3 84.0 85 cat 
4 55.5 60 cat 
5 28.3 37 cat 
6 27.0 32 cat 
7 18.0 25 cat 
8 0.0 0 cat 
9 0.0 100 dog 
10 10.0 89 dog 
11 16.0 85 dog 
12 44.5 60 dog 
13 71.7 37 dog 
14 73.0 32 dog 
15 82.0 25 dog 
16 100.0 0 dog 


dat <- structure(list(x = c(100, 90, 84, 55.5, 28.3, 27, 18, 0, 0, 10, 
    16, 44.5, 71.7, 73, 82, 100), y = c(100, 89, 85, 60, 37, 32, 
    25, 0, 100, 89, 85, 60, 37, 32, 25, 0), animal = c("cat", "cat", 
    "cat", "cat", "cat", "cat", "cat", "cat", "dog", "dog", "dog", 
    "dog", "dog", "dog", "dog", "dog")), class = "data.frame", row.names = c(NA, 
    -16L), .Names = c("x", "y", "animal")) 

library(ggplot2) 
ggplot(dat) + theme_bw() + 
    geom_area(aes(x=x, y=y, group=animal, fill=animal), alpha=.3) 

Stranamente, se mi sottoinsieme proprio cane è correttamente trame:

ggplot(subset(dat, animal=="dog")) + theme_bw() + 
    geom_area(aes(x=x, y=y, group=animal, fill=animal), alpha=.3) 

enter image description here

+0

'geom_line' corretto funzionamento, che può essere un indizio, così come sottoinsiemi solo 'gatto'. Sto usando ggplot2_1.0.0 –

+0

Non sono sicuro se questo abbia qualche significato/rilevanza, ma se rimuovi ad esempio la prima riga dei dati, funziona come previsto (ma ovviamente, il gatto sembra diverso a causa del punto dati mancante. .) –

+2

aggiungi 'order = y' a' aes' o 'dat [ordine (dat $ y),]' (PS non ho spiegazioni;)) – user20650

risposta

3

io non sono sicuro perché si ottiene questo risultato inaspettato. Ho avuto la stessa strana trama.

Una soluzione possibile:

ggplot() + 
    geom_area(data=dat[dat$animal=="dog",], aes(x=x, y=y, fill="red"), alpha=.3) + 
    geom_area(data=dat[dat$animal=="cat",], aes(x=x, y=y, fill="blue"), alpha=.3) + 
    scale_fill_discrete("Animal",breaks=c("red","blue"),labels=c("dog","cat")) + 
    theme_bw() 

che dà il risultato desiderato: enter image description here

4

ottengo lo stesso errore ... Un'altra possibile lavoro intorno è quello di utilizzare geom_ribbon.

ggplot(dat) + theme_bw() + 
geom_ribbon(aes(x = x, ymin = 0, ymax = y, group = animal, fill = animal, position = "stack"), alpha=.3) 

dà a questo anche la trama giusta :

Problemi correlati