2010-11-05 20 views
21

Nell'esempio seguente, come posso impostare ylim separati per ciascuna delle mie faccette?Come controllare ylim per un grafico sfaccettato con scale diverse in ggplot2?

qplot(x, value, data=df, geom=c("smooth")) + facet_grid(variable ~ ., scale="free_y") 

In ciascuna delle faccette, l'asse y prende una diversa gamma di valori e vorrebbe differenti ylims per ciascuna delle faccette.

I valori predefiniti sono troppo lunghi per la tendenza che voglio vedere.

risposta

5

Per quanto ne so, questo non è ancora stato implementato in ggplot2. Tuttavia, una soluzione alternativa - che ti darà ylim che superano quello che ggplot fornisce automaticamente - è aggiungere "dati artificiali". Per ridurre gli ylim rimuovi semplicemente i dati che non vuoi stampare (vedi ae per un esempio).

Ecco un esempio:

Diciamo solo impostare alcuni dati fittizi che si desidera tracciare

df <- data.frame(x=rep(seq(1,2,.1),4),f1=factor(rep(c("a","b"),each=22)),f2=factor(rep(c("x","y"),22))) 
df <- within(df,y <- x^2) 

che potremmo trama usando la linea grafici

p <- ggplot(df,aes(x,y))+geom_line()+facet_grid(f1~f2,scales="free_y") 
print(p) 

Si supponga che vogliamo partiamo da -10 nella prima riga e 0 nella seconda riga, quindi aggiungiamo un punto a (0, -10) al grafico in alto a sinistra e a (0,0) nel grafico in basso a sinistra:

ylim <- data.frame(x=rep(0,2),y=c(-10,0),f1=factor(c("a","b")),f2=factor(c("x","y"))) 
dfy <- rbind(df,ylim) 

Ora limitando il x-scala tra 1 e 2 i punti aggiunti non sono tracciati (un avvertimento è dato):

p <- ggplot(dfy,aes(x,y))+geom_line()+facet_grid(f1~f2,scales="free_y")+xlim(c(1,2)) 
print(p) 

stessa funzionerebbe per estendere il margine precedente aggiungendo punti con maggiore y valori a valori x che si trovano al di fuori dell'intervallo di xlim.

Questo non funzionerà se si vuole ridurre il ylim, nel qual caso sottoinsiemi di dati sarebbe una soluzione, ad esempio per limitare la riga superiore tra -10 e 1,5 si potrebbe usare:

p <- ggplot(dfy,aes(x,y))+geom_line(subset=.(y < 1.5 | f1 != "a"))+facet_grid(f1~f2,scales="free_y")+xlim(c(1,2)) 
print(p) 
Problemi correlati