2017-04-07 8 views
0

data関数のパラメータggplotに渡されたデータフレームの変数を別のggplot2関数で同じ呼び出しで使用したいとします。例えばggplot関数の 'data'パラメータで渡されたデータフレームの変数の参照

、次の例では、私は別の関数などのようにscale_x_continuousggplotdataパラメータに渡されたデータフレームに変数xを参照したい:

library(ggplot2) 

set.seed(2017) 

samp <- sample(x = 20, size= 1000, replace = T) 

ggplot(data = data.frame(x = samp), mapping = aes(x = x)) + geom_bar() + 
scale_x_continuous(breaks = seq(min(x), max(x))) 

そして私が手エラー:

Error in seq(min(x)) : object 'x' not found 

わかりました。もちろん、私が行うことで問題を回避することができます

df <- data.frame(x = samp) 
ggplot(data = df, mapping = aes(x = x)) + geom_bar() + 
scale_x_continuous(breaks = seq(min(df$x), max(df$x))) 

が、私はggplotの呼び出し外のオブジェクトdfを定義するために強制されないようにします。 dataに渡されたデータフレームの変数を直接参照できるようにしたいと考えています。

どうもありがとう

+1

を呼び出すためにヘルパー関数を書くことができます。 ggplotはデータ環境の 'scale_x_continuous'のパラメータを評価しません。さらに、各レイヤーに独自のデータソースを持たせることができます。スケールに達した時点で、どのデータ環境が「正しい」ものであるかは分かりません。おそらく、要求された列に基づいてレイヤーとスケールの両方を同時に追加するヘル​​パ関数を設定したいと思うでしょう。 – MrFlick

+0

この精度ではMrFlickに感謝しています。私は主にユニークなデータソースを使用しているので、あなたが言及した欠点は見当たりませんでした。 'scale_x_continuous'を強制的に同じ環境ggplotコールで?ヘルパー関数を作成することにより は、このようなのような関数を作成する意味ですか: 'ヘルパー< - 関数(DF){ ggplot(データ=のDF、マッピング= AES(X = X))+ scale_x_continuous(ブレーク=配列番号(MIN (df $ x)、max(df $ x))) } ' を呼び出すと、' helper(data.frame(x = samp))+ geom_bar() ' が呼び出されます。 ? –

+0

'scale_x_continuous'は、呼び出された場所以外の環境ではパラメータを評価しません。データ属性や美的マッピングを直接見ることはできません。別のもの(単純なタスクではない)をしたい場合は、独自の関数を記述する必要があります。 – MrFlick

答えて

1

あなたはプロット

helper <- function(df, col) { 
    ggplot(data = df, mapping = aes_string(x = col)) + 
    scale_x_continuous(breaks = seq(min(df[[col]]), max(df[[col]]))) 
} 

をinitilializeして、簡単にはできません

helper(data.frame(x = samp), "x") + geom_bar() 
+0

私はアイデアを得て、 'aes_string'トリックのおかげで –

関連する問題