2017-05-29 21 views
2

geom_smooth()geom_smooth()の引数をggplotから動的に変更し、グループ内のデータポイントの数に適応させるにはどうすればよいですか? (各PRODUCT基は約20エントリを有する)このチャートは完全に細かいggplot2からのgeom_smooth()を観測数に適合させる

1. DATE PRODUCT SIZE 
2. 3/1/2017 A 10 
3. 3/2/2017 B 14 
4. 3/3/2017 C 25 
5. 3/4/2017 A 16 
6. etc. 

、次のコードと、各グループに当てはめ黄土(PRODUCT)を追加:

例えば、私は、次の形式のデータを持っています:

DT<-read.csv("TEST_DATA.csv") 

DT$DATE<-as.Date(DT$DATE, "%m/%d/%Y") 

myPlot<-ggplot(DT, aes(DATE, SIZE, color = PRODUCT)) 

myPlot + geom_point() + geom_smooth(method = "loess", se = FALSE) 

しかし、のは、私が第四の製品のためのちょうど2のデータ・ポイント「D」に追加しましょう。次に、次の警告メッセージが表示され、黄色のフィット線がANYグループのプロットに追加されません。

Warning messages: 
1: In simpleLoess(y, x, w, span, degree = degree, parametric = parametric, ... : span too small. fewer data values than degrees of freedom. 

私はこの警告は、製品Dのための観測数が少ない黄土フィットの自由度という点であるという事実によるものであると信じています。

設定すると、"loess"が選択されますが、それは役に立たないので、設定方法は"lm"になりません。

私は次のようにしたいと思いますが、それはうまく動作しません。あなたが見ることができるように

myPlot + geom_point() + geom_smooth(data = DT, method = if(length(DT$PRODUCT)<5) {"lm"} else {"loess"}, se = F) 

、私は、任意のグループがそう"loess"メソッドを使用し、5つの未満の観測を持っている場合geom_smooth()使用method = "lm"を持ってしようとしています。しかし、私は、geom_smooth()関数内の各グループの観測数にアクセスする方法を理解することはできません。

答えて

0

あなたが使うことができるn引数(より滑らかに評価するポイント数)があります。詳細はstat_smoothを参照してください。

EDIT:あなたが動的にプロットを構築することができ

sProduct <- unique(DT$PRODUCT) 
myPlot <- ggplot(DT, aes(DATE, SIZE, color = PRODUCT)) + geom_point() 

for (i in sProduct){ 

    sMethod <- ifelse(sum(DT$PRODUCT == i) <= 5, "lm", "loess") 
    myPlot <- myPlot + geom_smooth(data = subset(DT, PRODUCT == i), method = sMethod, se = FALSE) 
} 

myPlot 
+0

こんにちはコンスタン、のための感謝:irisデータフレームの場合は、最小のグループは、長さ50

conditional_smooth(iris, "Petal.Length", "Sepal.Length", "Species") 

enter image description here

は、今度は、4つの値に一つのグループを短縮させましたあなたは返信する - それはnオプションが黄色のフィットをプロットするために使用するいくつの解像度ポイントを決定するようだが、これは数に関係しない根底にある観測の私は5回以下の観察をしたときには "lm"フィットを使いたい、そうでなければ "黄土"を使う。 – dme

+0

こんにちはConstantinos、これは私が必要とするものです。ありがとうございました! – dme

1

あなたが最小のグループ長に基づいて、条件付きで平滑化方法を選択する機能を記述することができます。たとえば、

この機能を実行します。

conditional_smooth(iris[c(1:50,97:150), ], "Petal.Length", "Sepal.Length", "Species") 

enter image description here

+0

こんにちはeipi10、コンスタンティノスに似て、あなたの答えは私が必要とするものとまったく同じです。ご協力いただきありがとうございます。 – dme

関連する問題