web-dev-qa-db-ja.com

単純なlmトレンドラインをggplotボックスプロットに追加する

私が使用する標準のRグラフィックを使用して箱ひげ図に線形モデルの傾向線を追加する場合:

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

ただし、これを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])

次のエラーが発生します。

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

また、線がプロットに表示されません。

これらのシナリオの両方で使用されるモデルは同じです。誰かが私が間違っているところを指摘できたら、それは素晴らしいことです。

編集:例としてirisデータセットを使用しました。

17
JPD

エラーメッセージは説明が必要ないほどわかりやすくなっています。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

24
Andrie

ちなみに、このエラーはggplot2へのシンプルなqplotインターフェースを使用して発生(および修正)することもできます

エラーメッセージは、少なくとも数人にとっては説明が不十分です:-)。この場合、重要なのは、提案された美的感覚のコンテンツのみを含めることです

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