2011-06-29 9 views
5

私の便宜のため、既存のプロットにラインプロットと散布プロットを追加する関数を記述したいと思います。私は定義した:ggplot2のプロットにポイントを追加するライン

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

     p 
    } 

上記の機能は動作しません。 +符号とgeom_point()部分を削除すると動作します。何らかの理由でこれらの2つのギオムを追加できないため、上記は機能しません。次の例は、この問題を示しています。

はその後、私が試した:

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

私は、問題文にある考え出し:

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

上記のステートメントを定義しようとするとエラーがスローされます:バイナリオペレータに非数値の引数を。

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

仕事を:私が作ることができるように

にはどうすればaddlinetoplot()関数を定義することができます。 1つの方法は、geom_lineとgeom_pointを分離し、それぞれに異なる関数定義を持たせることです。同じ機能でそれを行う方法はありますか?

ありがとうございます!

答えて

11

私はここで参照を見つけることができませんが、新しい引数をリストとして渡すことによってggplotプロットに追加することができると答えたところです。

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

そしてあなたのプロットのコードは次のようになります:したがって、あなたの関数はなりに

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

結果:

enter image description here

関連する問題