2013-05-15 8 views
13

Nel ggplot2, il seguente comando p <- qplot(wt, mpg, data=mtcars, colour=factor(cyl)) tratto da here trame un grafico a dispersione con ogni punto colorato in base al fattore diggplot2 colore geom_point da fattore, ma geom_smooth in base a tutti i dati

vorrei per adattarsi a tutti i dati con un geom_smooth indipendentemente di fattore ma mantenendo il colore dei singoli punti in base al fattore. p + geom_smooth(method="lm") esegue un adattamento lineare su ciascun fattore. Come faccio a fare questo?

risposta

20

È possibile eseguire questa operazione in modo semplice spostando indietro dalla funzione wrapper "qplot" e utilizzando direttamente le funzioni "ggplot" e geometria.

ggplot(mtcars, aes(x=wt, y=mpg)) + 
    geom_point(aes(colour=factor(cyl))) + 
    geom_smooth(method="lm") 

demo chart

Fase 1: Impostare le impostazioni iniziali 'ggplot. Queste sono le impostazioni che si desidera essere predefinite per le funzioni geometriche.

ggplot(mtcars, aes(x=wt, y=mpg)) 

In questo caso, si utilizzano dati i 'mtcars' per tutte le geometrie con 'peso' assegnato al xe 'mpg' assegnato l'asse y. Specificando questi all'inizio, riduciamo il rischio di creare problemi quando si esegue il copia-incolla nelle funzioni geometriche.

Passaggio 2: Disegna la geometria del punto, utilizzando i fattori di "Cilindro" per colorare i punti. Questo è ciò che stava facendo la funzione 'qplot' originale, ma lo stiamo specificando un po 'più esplicitamente.

geom_point(aes(colour=factor(cyl))) 

Fase 3: Disegnare il modello lineare levigata. Questo è esattamente ciò che l'OP ha scritto prima, ma ora che l'estetica della colorazione non fa più parte delle impostazioni predefinite, la modella disegna come previsto.

geom_smooth(method="lm") 

Catena tutto insieme con il + et voilà!

Per riferimento: Si potrebbe altrettanto facilmente fare questo con l'essere esplicito in ogni strato, in questo modo:

ggplot() + 
    geom_point(data=mtcars, aes(x=wt, y=mpg, colour=factor(cyl))) + 
    geom_smooth(data=mtcars, method="lm", aes(x=wt, y=mpg)) 
5

A mio parere, lo ggplot è molto più semplice se si inizia a utilizzare la funzione ggplot() anziché qplot. Il controllo dell'estetica ha molto più senso. In questo caso, è sufficiente costruire la vostra base:

p <- ggplot(mtcars, aes(wt, mpg)) 

poi costruire le due geom s in cima:

p + geom_point(aes(colour = factor(cyl))) + 
    geom_smooth(method = "lm") 

enter image description here

fatemi sapere se che non era quello che sei dopo.

+0

Grazie per la risposta. Io uso la funzione ggplot() piuttosto che qplot. Solo l'esempio sulla pagina web collegata ha coperto lo sfondo della mia domanda abbastanza bene. Quello che mi ha confuso qui erano diversi strati che ora capisco – moadeep

+0

A volte invio una risposta, vedo qualcun altro ha scritto la stessa risposta esatta e penso, "Forse dovrei aspettare ancora un po 'prima di rispondere ..." – Dinre

+0

O semplicemente più veloce :-) – alexwhan

1

Sono d'accordo con le risposte precedenti da @alexwhan e @Dinre che il ggplot() + geom_point (...) + ...è l'approccio migliore a questo problema

Tuttavia, se si desidera modificare la vostra soluzione provare

p + geom_smooth(method = 'lm', aes(colour = NA), colour = 'magenta') 
Problemi correlati