2012-03-02 23 views
5

私は同様のグラフをたくさんプロットしていますので、タスクを簡略化する関数を書くと思いました。私はそれにdata.frameとプロットされる列の名前を渡したいと思います。data.framesを処理する関数にカラム名を渡す方法

plot_individual_subjects <- function(var, data) 
{ 
    require(ggplot2) 

    ggplot(data, aes(x=Time, y=var, group=Subject, colour=SubjectID)) + 
    geom_line() + geom_point() + 
    geom_text(aes(label=Subject), hjust=0, vjust=0) 
} 

を今varが、それは動作しません文字列の場合:ここで私が試したものです。 ggplotコマンドの一部であるaesy=data[,var]に変更しても、クロージャのサブセットを作成できないと不平を言う場合には機能しません。

これと同様の問題を解決するには正しい方法とベストプラクティスは何ですか? data.framesで処理したい機能にカラム名を簡単かつ安全に渡すにはどうすればよいですか?

+2

代わりに 'aes_string'を使用してください。 – joran

+1

あなたは答えとしてそれを投稿することもできます。 – Justin

答えて

10

バートジョランは、コメントに答える!

aes_stringを使用して、変数名を文字列として渡すことができます。あなたの特別なケースでは、yの変数を変更するだけであるように見えるので、おそらく、どの幾何学にどの美学がマッピングされているかを再編成したいと思うでしょう。例えば、多分このような何か:

ggplot(data, aes_string(y = var)) + 
    geom_line(aes(x = Time,group = Subject,colour = SubjectID)) + 
    geom_point(aes(x = Time,group = Subject,colour = SubjectID)) + 
    geom_text(aes(x = Time,group = Subject,colour = SubjectID,label = Subject),hjust =0,vjust = 0) 

や周りおそらく他の方法で、あなたの好みに応じて。

+0

ジョラン、aes()とaes_string()を同じggplot呼び出しで混ぜる方法はありますか?つまり、もし私のx軸が常にすべてのギオムスに共通であれば、それをgeomコールに入れるのはちょっと複雑です。 – KarateSnowMachine

+2

@KarateSnowMachine同じレイヤーで 'aes'と' aes_string'の両方を使うことはできません。 'aes_string'に' x = 'Time''などのようにマップすることができます。 – joran

+0

ありがとうございました。 – KarateSnowMachine

関連する問題