2011-06-29 36 views
5

içinde bir arsaya nokta ile çizgi ekleme Benim rahatlığım için, varolan bir arsaya bir çizgi arsa ve dağılım grafiği ekleyen bir işlev yazmak istiyorum. Tanımlandı:ggplot2

Yukarıdaki işlev çalışmıyor. + işaretini ve geom_point() bölümünü kaldırırsam çalışır. Yukarıdakiler işe yaramaz çünkü bir sebepten dolayı bu iki jeomiyi ekleyemez. Aşağıdaki örnek problemi göstermektedir.

Sonra, güvenilir: Yukarıdaki açıklama tanımlamak için çalışmak

addthistotheplot <- geom_line(data=df2, aes_string(x="c1", y="csq")) + 
        geom_point(data=df2, aes_string(x="c1", y="csq")) 

bir hata verir: ikili operatöre sayısal olmayan argüman

df1 <- data.frame(c1 = c(1:10), c2 = c(1:10)) 
c1 <- c(1:10) 
csq <- c1^2 
df2 <- data.frame(c1 = c(1:10), csq) 
pltbase <- ggplot() + geom_line(df1, aes(x="c1", y="c2")) 

# This does not work. 
pltbase + addlinetoplot(dataset=df2, varx = "c1", vary = "csq") 

Sorun deyimiyle Şekilli.

pltbase + addlinetoplot(dataset=df2, varx = "c1", vary = "csq") 

işi: Yapmak böylece

nasıl addlinetoplot() fonksiyonunu tanımlayabilir. Bir yol, geom_line ve geom_point öğelerini ayırmak ve her biri için farklı işlev tanımlarına sahip olmaktır. Aynı işlevde bunu yapmak için bir yolu var mı?

Teşekkürler!

cevap

11

Şu anda başvuru bulamıyorum, ancak SO üzerinde yeni argümanları liste halinde geçirerek bir ggplot çizimine ekleyebileceğinizi açıklayan bir yerde bir cevap var.

addlinetoplot <- function(dataset, varx, vary) { 
    list(
    geom_line(data=dataset, aes_string(x=varx, y=vary)), 
    geom_point(data=dataset, aes_string(x=varx, y=vary)) 
) 
} 

Ve sonra komplo kodu benziyor: Buna göre, sizin fonksiyonu olur içinde

pltbase <- ggplot() + geom_line(data = df1, aes(x=c1, y=c2)) 
pltbase + addlinetoplot(df2, varx = "c1", vary = "csq") 

Sonuçlar:

enter image description here