2016-12-23 11 views
-1

1つの散布図に3つの異なるデータフレームから2つの変数をプロットし、各直線関係の式を自動的にプロットします。私は次のコードを使用しています。しかし、私は2つの問題があります:1)全範囲ではなく、同じ値のプロットを得る(例えば、df1 = 700、df2 = 350、df3 = 450の値)。 NAを省略することの役割は何ですか?私は両方の方法を試していましたが、私はまだ同じプロットを取得していました.2)方程式をテキストとして追加するだけでlm関数を実行し、プロットに手動でrelathionshipを追加することができます。私はそれを自動的に行う必要があります。私が使用していたコードは次のとおりです。1つの散布図に3つ以上の変数をプロットする

ggplot(df1, aes(x=noxppb, y=OX, colour = "red")) + 
    geom_point(colour = "red", shape=2) + # Use hollow circles 
    geom_smooth(method=lm, se = FALSE) + 
    geom_point(data = df1, aes(x=noxppb, y=OX)) + 
    geom_point(colour = "blue", shape=3) + 
    geom_smooth(method = lm, se = F, colour = "blue", data = df2, aes(x=noxppb, y=OX)) + 
    geom_point(colour = "green", shape=4) + 
    geom_smooth(method = lm, se = F, colour = "green", data = df3, aes(x=noxppb, y=OX)) 

私は、次の画像を取得する:私はこれに似た何かが必​​要しかしenter image description here

enter image description here

おかげ

+0

ggplotソリューションが必要ですか? –

+0

2つのレイヤーを使ってN個の異なる色の線と点をプロットする必要はありません。 – baptiste

+0

各データフレームに色の列を追加し、それらをすべて結合して新しい列を使用してグループ化します。再現可能な例を作るためにdata.frameの 'dput'ヘッダを使用します。 – HubertL

答えて

3

はこれを試すと、

d <- plyr::mdply(data.frame(a=c(1,2,3), b=c(-1,0,1)), 
       function(a,b) data.frame(x=seq(0,10), y=jitter(a*seq(0,10)+b))) 


equationise = function(d, ...){ 
    m = lm(y ~ x, d) 
    eq <- substitute(italic(y) == a + b %.% italic(x), 
             list(a = format(coef(m)[1], ...), 
              b = format(coef(m)[2], ...))) 
    data.frame(x = Inf, y = d$y[nrow(d)], 
      label = as.character(as.expression(eq)), 
      stringsAsFactors = FALSE) 
} 


eqs <- plyr::ddply(d, "a", equationise, digits = 2) 


ggplot(d, aes(x=x, y=y, colour = factor(a))) + 
    geom_point() + 
    geom_smooth(method = "lm", se = FALSE) + 
    geom_label(data=eqs, aes(label = label), parse=TRUE, hjust=1) 

enter image description here

+0

私はコードを実行していますが、結果もエラーも表示されません。 –

+0

私のコードは怠惰で機能的です – baptiste

関連する問題