web-dev-qa-db-fra.com

Ajout d’une ligne de tendance lm simple à une boîte à moustaches ggplot

Lorsque j'ajoute une ligne de tendance de modèle linéaire à un diagramme en utilisant des graphiques R standard, j'utilise:

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

Cependant, lorsque vous utilisez ceci dans 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])

Je reçois l'erreur suivante:

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

Et la ligne n'apparaît pas sur mon complot.

Les modèles utilisés dans ces deux scénarios sont identiques. Si quelqu'un pouvait indiquer où je me trompe, ce serait formidable. 

EDIT: Utiliser le jeu de données iris comme exemple.

16
JPD

Le message d'erreur est assez explicite: Ajoutez aes(group=1) à 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
Andrie

Pour votre information, cette erreur peut également être rencontrée (et corrigée) à l’aide de la simple interface qplot avec ggplot2

Le message d'erreur n'est pas suffisamment explicatif pour au moins quelques personnes: -). Dans ce cas, la clé est d'inclure uniquement le contenu de l'esthétique suggérée. 

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
tim