2013-02-22 9 views
5

Voglio creare un array di trame 2x4 che mostri che le distribuzioni cambiano nel tempo. L'accordo ggplot predefinito con facet_wrap è che la riga superiore ha serie 1 & 2, la seconda riga ha serie 3 & 4, ecc. Vorrei cambiare questo in modo che la prima colonna abbia serie in ordine (1-> 2-> 3-> 4) e poi la seconda colonna ha le successive 4 serie. In questo modo l'occhio può confrontare immediatamente distribuzioni adiacenti nel tempo in verticale (come penso che dovrebbero essere).Come modificare l'ordine principale da riga a colonna con facet_wrap?

+0

cambiare i livelli di incarto factor..see [questo] (http://stackoverflow.com/questions/5490638/how-to-change-the -order-of-facet-labels-in-ggplot-custom-facet-wrap-labels) – agstudy

+0

Mi rendo conto che posso farlo, ma quando i livelli sono solo punti temporali, è un po 'scialbo, non credi? I livelli sarebbero qualcosa di simile (1,10,2,20,3,30,4,40, ...) e così via. –

+2

Non capisco il tuo punto qui. puoi fornire un esempio riproducibile per favore. – agstudy

risposta

4

Sembra che avete bisogno di fare questo con il fattore di ordinamento prima della chiamata facet_wrap:

fac <- factor(fac, levels=as.character(c(1, 10, 2, 20, 3, 30, 4, 40))) 

Il valore di default a/tavola in facet_wrap è VERO che sta andando a mettere il valore più basso ("1 "in questo caso) in alto a sinistra e il valore più alto (" 40 "nell'esempio sopra) nell'angolo in basso a destra. Quindi:

pl + facet_wrap(~fac, ncol=2, nrow=4) 

I tuoi commenti suggeriscono che stai lavorando con variabili numeriche di classe. (I tuoi commenti non forniscono ancora un esempio funzionante e sembra che tu pensi che questa sia la nostra responsabilità e non la tua. Dove si acquisiscono tali nozioni di diritto?) Questo dovrebbe creare un fattore che potrebbe essere "colonna maggiore" ordinato con numerico di ingresso fattore:

> ss <- 1:8; factor(ss, levels=ss[matrix(ss, ncol=2, byrow=TRUE)]) 
[1] 1 2 3 4 5 6 7 8 
Levels: 1 3 5 7 2 4 6 8 

D'altra parte mi viene in mente situazioni in cui questo potrebbe essere l'approccio efficace:

> ss <- 1:8; factor(ss, levels=ss[matrix(ss, nrow=2, byrow=TRUE)]) 
[1] 1 2 3 4 5 6 7 8 
Levels: 1 5 2 6 3 7 4 8 
+0

Sfortunatamente, penso che questo sia l'unico modo per farlo. Semplicemente non mi piace, perché non è molto elegante. Oh bene. Non posso vincerli tutti. Grazie. –

+2

Il caso di lavoro deve essere diverso, poiché l'ordine predefinito dell'esempio che ho offerto è lo stesso che ho creato. Le migliori risposte sono sempre ottenute dalla maggior quantità di informazioni nella domanda. –

+0

Tutte le informazioni necessarie che ho dato. facet_wrap (~ time) dove time = 1,2,3,4 ... Questo verrà tracciato prima sulle righe e quindi sulle colonne per impostazione predefinita. Stai dicendo che ottieni qualcosa di diverso da quello in cui traccia prima le colonne e poi le righe? –

1

utilizzare il parametro direzione dir-facet_wrap(). Predefinita è orizzontale, e questo può essere commutato in verticale:

# Horizontally 
ggplot(mtcars, aes(x=hp, y=mpg)) + geom_point() + facet_wrap(~ cyl, ncol=2) 

# Vertically 
ggplot(mtcars, aes(x=hp, y=mpg)) + geom_point() + facet_wrap(~ cyl, ncol=2, dir="v") 
Problemi correlati