2012-06-06 12 views
15

Dodając liniowej modelu trendu do wykresu pudełkowego stosując standardowe grafiki R używać:Dodawanie prostą linię trendu lm do ggplot boxplot

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

Jednak podczas korzystania z tego w 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]) 

pojawia się następujący błąd:

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

a linia nie pojawia się na mojej działce.

Modele stosowane w obu tych scenariuszy są identyczne. Jeśli ktokolwiek mógłby wskazać, gdzie idę źle, byłoby wspaniale.

EDIT: Używany zestaw danych przysłony jako przykład.

Odpowiedz

22

Komunikat o błędzie jest dość dużo oczywiste: Dodaj aes(group=1) do 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, ja nie znał wzoru musiał zostać zastąpiony z nim. Dzięki za rozwiązanie tego. – JPD

+0

Należy zauważyć, że nie "zastąpiłem" formuły. Formuła nie była konieczna, więc ją usunąłem. – Andrie

+9

Pet peeve: "komunikat o błędzie jest oczywisty". Gdyby to było zrozumiałe, OP nie zadałoby pytania na początek. – Twitch

1

FYI, ten błąd może również wystąpić (i stałe) za pomocą prostego qplot interfejs ggplot2

komunikat błąd nie objaśnia wystarczająco dla kilku osób przynajmniej :-). W tym przypadku kluczem jest to tylko zawartość sugerowanej estetycznej

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) 
Powiązane problemy