2012-06-26 8 views
7

Voglio fare un grafico a punti con ggplot2 geom_point dove una variabile continua è stratificata da diversi fattori.ggplot2 traccia 3 fattori con qualche jigging sull'asse x

E 'piuttosto complicato, forse sto cercando di mostrare troppo in un solo grafico, ma ho tre diversi fattori che influenzano le cose

voglio mostrare come questo

p <- ggplot(mtcars[,c(1,2,10,11)], aes(factor(cyl), mpg)) 
p + geom_point(aes(colour = factor(gear), shape=factor(carb))) 

enter image description here

Tuttavia, voglio dividere il fattore (ingranaggio), vale a dire per ciascuno dei tre fattori (cilindro) valore sull'asse x, voglio una piccola distanza tra i diversi fattori (ingranaggio) colori sull'asse x

cioè all'interno di factor (cyl) == 4, factor (gear) == 3 è una sorta di su 3.9, factor (gear) == 4 is on 4 e factor (gear) == 5 è sort of on 4.1. Questo è ripetuto per ogni valore di fattore (cil).

speranza che abbia un senso

NB questo è un esempio di giocattoli. Lo farei usando valori categoriali, non numerici invece di numeri fattorizzati; Mi rendo conto che avere valori su 3.9/4.1 è fonte di confusione.

+1

perché non sfaccettare i dati sulla marcia di dare tre lotti? – John

+0

facet suona bene, sto cercando di capirlo usando questo: http://had.co.nz/ggplot2/facet_grid.html –

+1

se trovato questo link abbastanza utile per ggplot2 - http://wiki.stdout.org/ rcookbook/Graphs/ – John

risposta

8

Con facet_grid() e mtcars esempio:

library(ggplot2) 
data(mtcars) 

p <- ggplot(mtcars, aes(factor(cyl), mpg)) + geom_point(aes(colour=factor(carb))) 
p + facet_grid(. ~ gear) 

By number of gears

+0

Questo è fantastico. C'è un modo semplice per cambiare le proprietà del testo nella parte superiore delle diverse sfaccettature (forse questa dovrebbe essere una domanda separata!) –

+0

Scrap che, c'è un ottimo esempio qui: http://wiki.stdout.org/ rcookbook/Graphs/Facets% 20% 28ggplot2% 29/(grazie mille per il link John!) –

4

subset è un modo per farlo. Sottoinsi i dati per gears, quindi posiziona il set di punti per ogni sottoinsieme a turno.

library(ggplot2) 

p <- ggplot() 
p + geom_point(data = subset(mtcars[,c(1,2,10,11)], gear == 3), aes(x = as.numeric(factor(cyl)) - 0.1, y = mpg, colour = factor(gear), shape=factor(carb))) + 
    geom_point(data = subset(mtcars[,c(1,2,10,11)], gear == 4), aes(x = as.numeric(factor(cyl)), y = mpg, colour = factor(gear), shape=factor(carb))) + 
    geom_point(data = subset(mtcars[,c(1,2,10,11)], gear == 5), aes(x = as.numeric(factor(cyl)) + .1, y = mpg, colour = factor(gear), shape=factor(carb))) + 
    scale_x_continuous("Cylinders", breaks = c(1,2,3), labels = c(4,6,8), expand = c(.2,0)) 

enter image description here

+0

Funziona con l'esempio che ho dato, ma funzionerebbe quando si utilizza un valore categoriale anziché numerico per Cilindri? –

+0

Non vedo perché no. Puoi provarlo sui dati mtcars dopo qualche ricodifica: 'library (car); mtcars $ cyl = factor (recode (mtcars $ cyl, "4 = 'Four'; 6 = 'Six'; 8 = 'Eight'"), levels = c ("Four", "Six", "Eight"))) "Preferisco sempre l'aspetto, ma la soluzione fa esattamente quello che hai chiesto. –

Problemi correlati