2011-11-23 14 views
8

Ci scusiamo per il fatto che questo esempio non è eccezionale ma evidenzia il punto.geom_smooth() - e ridimensionamento dell'asse y, perdita di dati dall'attenuazione

mtcars$tran <- factor(mtcars$am, labels=c("Man","Aut")) 
ggplot(mtcars, aes(x=hp, y= mpg, group=tran)) + geom_smooth(aes(colour=tran)) 
ggplot(mtcars, aes(x=hp, y= mpg, group=tran)) + geom_point(aes(colour=tran)) 
ggplot(mtcars, aes(x=hp, y= mpg, group=tran)) + geom_point(aes(colour=tran)) + geom_smooth(aes(colour=tran)) 
ggplot(mtcars, aes(x=hp, y= mpg, group=tran)) + geom_smooth(aes(colour=tran)) + scale_y_continuous(limits=c(12,60)) 

Quello che voglio fare è disegnare una curva levigata ma 'zoom in' limitando la scala dell'asse y. Tuttavia sembra che ggplot escluda qualsiasi dato al di fuori dei limiti di scala quando si elaborano le curve levigate. Sì, questo sembra logico, ma come potrei vedere ciò che voglio vedere? Nei miei dati reali, i valori (grezzi) sono compresi tra 5 e 14, ma le curve levigate si trovano interamente tra 7 e 9. Quindi c'è un sacco di spazio vuoto in alto. Quando lo imposto in c (7,9) non usa più punti al di fuori di tale intervallo per calcolare la curva liscia, e quindi ottengo una curva diversa.

Non posso fornire dati ma in questo esempio è possibile visualizzarli. Osserva come nell'ultimo grafico, due punti vengono eliminati e l'ultima metà della curva "Uomo" non è uguale a quella del grafico originale.

Domanda

Se scale_y_continuous limita i valori dei dati che vengono utilizzati per costruire la curva levigata (logico), come si può disegnare la curva con tutti i dati e poi 'zoom in' su di esso (WRT la asse y).

Fatemi sapere se questo non è chiaro.

Grazie

+0

Lo zoom predefinito di 'geom_smooth' sta per cambiare, da quanto ho capito, nella prossima versione (che dovrebbe uscire intorno a Natale/Nuovo Anni). Vedi qui, ad esempio: http: //stackoverflow.com/questions/7857020/ggplot2-zooming-in-on-geom-smooth-automatically-using-coord-cartesian –

risposta

13

Uso coord_cartesian invece di scale_y_continuous

ggplot(mtcars, aes(x=hp, y= mpg, group=tran)) + 
geom_smooth(aes(colour=tran)) + 
coord_cartesian(ylim = c(12,60)) 
+0

ta brillante! Sempre un modo, devo solo sapere dove guardare. – nzcoops

Problemi correlati