2016-04-11 13 views
2

Rのgeom_smooth()を使用して複数のトレンドラインをオーバーレイしようとしています。現在このコードがあります。散布図の重なり合ったトレンドラインR

ggplot(mtcars2, aes(x=Displacement, y = Variable, color = Variable)) 
+ geom_point(aes(x=mpg, y = hp, col = "Power")) 
+ geom_point(aes(x=mpg, y = drat, col = "Drag Coef.")) 

私は、このグラフを与える

(mtcars2はmtcarsの正規化された形です)。 enter image description here

geom_smooth(method = 'lm')を使用して、2つの変数の2つのトレンドラインを描画しようとしています。何か案は?

(ボーナス:。私はまた、varaibles可能であれば、以下の方法が機能しない区別するために「形状= 1」のparamaterを実装したいと思います)私はこれを行うために管理

geom_point(aes(x=mpg, y = hp, col = "Power", shape=2)) 

を更新。

ggplot(mtcars2, aes(x=Displacement, y = Variable, color = Variable)) 
+ geom_point(aes(x=disp, y = hp, col = "Power")) 
+ geom_point(aes(x=disp, y = mpg, col = "MPG")) 
+ geom_smooth(method= 'lm',aes(x=disp, y = hp, col = "Power")) 
+ geom_smooth(method= 'lm',aes(x=disp, y = mpg, col = "MPG")) 

このように見えます。

enter image description here

しかし、これはコードの醜い部分です。誰かがこのコードをもっときれいに見せることができれば、それはすばらしいでしょう。また、私はまだ 'shape = 2'パラメータを実装することができませんでした。

+0

' mtcars2'は 'mtcars'と異なりますか? – steveb

+0

私はデータセット全体を正規化しました。それに応じて質問を更新しました。 – krthkskmr

答えて

5

あなたはあなたの人生をもっと難しくしているようです... groupshapeのような追加のパラメータをaes()に渡すことができます。

私は右のあなたの正常化を得た場合、私は知りませんが、これは正しい方向に軌道に乗るために十分なあなたを与える必要があります。

library(ggplot2) 
library(reshape2) 

#Do some normalization 
mtcars$disp_norm <- with(mtcars, (disp - min(disp))/(max(disp) - min(disp))) 
mtcars$hp_norm <- with(mtcars, (hp - min(hp))/(max(hp) - min(hp))) 
mtcars$drat_norm <- with(mtcars, (drat - min(drat))/(max(drat) - min(drat))) 

#Melt into long form 
mtcars.m <- melt(mtcars, id.vars = "disp_norm", measure.vars = c("hp_norm", "drat_norm")) 

#plot 
ggplot(mtcars.m, aes(disp_norm, value, group = variable, colour = variable, shape = variable)) + 
    geom_point() + 
    geom_smooth(method = "lm") 

降伏:どのよう

enter image description here

+0

ありがとう!それはうまくいった!しかし、新しいテーブルを作成せずに使用する列を特に選択できる方法が必要です。 (私は非常に辛いですが、コードを最小限に抑えようとしています) – krthkskmr

+0

@krthkskmr - あなたが望むなら 'melt()'関数を 'ggplot()'の呼び出しの中に埋め込むことができます。それに応じて 'measure.vars'を修正する必要があります。しかし、 'ggplot'の例の99%が' melt() 'の呼び出しで始まる理由があります。これは、通常、データを 'ggplot2'フレンドリーにするためにいくつかの前処理を行う必要があるからですフォーマット。 – Chase

+0

@krthkskmr - また、コンピュータのメモリが安く、過度に高密度のコードを書いていない...ときどきステップで物事を壊す方が良いです:) – Chase