2012-06-06 6 views
15

Quando si aggiunge una linea di tendenza modello lineare di un grafico a scatole utilizzando grafica standard R utilizzo:Aggiunta di una semplice linea di tendenza lm ad un ggplot boxplot

boxplot(iris[,2]~iris[,1],col="LightBlue",main="Quartile1 (Rare)") 
modelQ1<-lm(iris[,2]~iris[,1]) 
abline(modelQ1,lwd=2) 

Tuttavia, quando si utilizza questo ggplot2:

a <- ggplot(iris,aes(factor(iris[,1]),iris[,2])) 
a + geom_boxplot() + 
geom_smooth(method = "lm", se=FALSE, color="black", formula=iris[,2]~iris[,1]) 

ottengo il seguente errore:

geom_smooth: Only one unique x value each group.Maybe you want aes(group = 1)? 

E la linea non appare sul mio terreno.

I modelli utilizzati in entrambi questi scenari sono identici. Se qualcuno potesse indicare dove sto andando male, sarebbe fantastico.

MODIFICA: ha utilizzato il set di dati dell'iride come esempio.

risposta

22

Il messaggio di errore è praticamente auto-esplicativo: Aggiungi aes(group=1) a geom_smooth:

ggplot(iris, aes(factor(Sepal.Length), Sepal.Width)) + 
    geom_boxplot() + 
    geom_smooth(method = "lm", se=FALSE, color="black", aes(group=1)) 

enter image description here

+0

Ah ok, non sapevo la formula ha dovuto essere sostituito con esso. Grazie per aver risolto questo. – JPD

+0

Si noti che non ho "sostituito" la formula. La formula non era necessaria, quindi l'ho rimossa. – Andrie

+9

Pet peeve: "il messaggio di errore è auto-esplicativo". Se fosse un OP auto-esplicativo, non avrebbe mai fatto la domanda per cominciare. – Twitch

1

FYI, si possono incontrare questo errore anche (e fissato) utilizzando la semplice interfaccia qplot a ggplot2

Il messaggio di errore non è sufficientemente esplicativo per alcune persone almeno :-). In questo caso, la chiave è di includere solo il contenuto della suggerito estetica

library(ggplot2) 
qplot(factor(Sepal.Length), Sepal.Width, geom = c("smooth"), data= iris) 
# error, needs aes(group=1) 
qplot(factor(Sepal.Length), Sepal.Width, geom = c("smooth"), group = 1, data= iris)