Domanda Aggiungere una semplice linea di tendenza lm a un boxplot ggplot


Quando aggiungo una linea di tendenza del modello lineare a un boxplot utilizzando la grafica standard di R uso:

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 in 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 sulla mia trama.

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

EDIT: usato il set di dati iris come esempio.


16
2018-06-06 08:54


origine


risposte:


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


23
2018-06-06 09:49



Cordiali saluti, questo errore può anche essere incontrato (e risolto) usando il semplice qplot interfaccia a ggplot2

Il messaggio di errore non è abbastanza esplicativo per alcune persone almeno :-). In questo caso, la chiave è includere solo il contenuto dell'estetica suggerita

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)

1
2017-08-04 21:24