2016-04-11 31 views
2

Trend Çizgileri Üst üste bindirme R'de geom_smooth() öğesini kullanarak birden çok trend çizgisini üst üste yerleştirmeye çalışıyorum. Şu anda bu koda sahibim.Scatterplots, 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.")) 

bana bu grafiği vermek

(mtcars2 mtcars normalleştirilmiş şeklidir). enter image description here

Ben iki değişken için iki eğilim çizgiler çizmek için geom_smooth (yöntem = 'lm') kullanmak için çalışıyorum. Herhangi bir fikir?

(Bonus:. Ben de varaibles mümkünse aşağıdaki yöntem çalışmaz ayırt etmek 'şeklini = 1' parametrenin yeni uygulamak istiyorum) Bunu başardı

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

Güncelleme .

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")) 

Buna benziyor.

enter image description here

Ama bu kodun çirkin parçasıdır. Bu kodu daha güzel gösterebilirse, bu harika olur. Ayrıca, henüz 'shape = 2' parametresini de uygulayamadım. Eğer olması gerekenden daha hayatınızı daha zor yapıyoruz gibi görünüyor

+0

' mtcars2' mtcars'dan farklı mı? – steveb

+0

Tüm veri kümesini normalleştirdim. Buna göre soru güncellendi. – krthkskmr

cevap

5

... Eğer aes() gibi group ve shape içine ilave parametrelerinde geçebilir.

Ben sağ normalleşmesini sahipsek bilmiyorum ama bu doğru yönde gidiyor almak için yeterli size vermelidir:

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") 

Verim: does nasıl

enter image description here

+0

Teşekkürler! İşe yaradı! Ancak, yeni bir tablo oluşturmadan kullanmak için özellikle sütunları seçebileceğim bir yöntem istiyorum. (Çok dikkatli olduğumu biliyorum, ama kodu en aza indirmeye çalışıyorum) – krthkskmr

+0

@krthkskmr - eğer isterseniz mel ggplot() 'fonksiyonundaki' melt() 'fonksiyonunu gömebilirsiniz. Daha sonra buna göre 'measure.vars' değiştirmelisiniz. Ancak, 'ggplot' örneklerinin% 99'unun 'melt()' ile aranmaya başlamasının bir nedeni var ve bunun nedeni genellikle' ggplot2'ye dost olmak için verilerin önceden işlenmesi gerekiyor. biçim. – Chase

+0

@krthkskmr - ayrıca, bilgisayar hafızası ucuzdur, aşırı derecede kod yazmak zor değildir ... Bazen basamaklarda işleri bozmak daha iyidir :) – Chase